From 0933cbcb9ce67e055f5230a8d5e07f5cb41f887d Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Sat, 11 Apr 2026 18:14:48 +0100 Subject: [PATCH] agent: add compression api --- src/Simplex/Messaging/Compression.hs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/Simplex/Messaging/Compression.hs b/src/Simplex/Messaging/Compression.hs index 634542500..a8f1ad548 100644 --- a/src/Simplex/Messaging/Compression.hs +++ b/src/Simplex/Messaging/Compression.hs @@ -7,6 +7,7 @@ module Simplex.Messaging.Compression compressionLevel, compress1, decompress1, + limitDecompress1, decompressedSize, ) where @@ -48,12 +49,20 @@ decompressedSize = \case Passthrough bs -> Just $ B.length bs Compressed (Large bs) -> Z1.decompressedSize bs -decompress1 :: Int -> Compressed -> Either String ByteString -decompress1 limit = \case +decompress1 :: Compressed -> Either String ByteString +decompress1 = \case + Passthrough bs -> Right bs + Compressed (Large bs) -> decompress_ bs + +limitDecompress1 :: Int -> Compressed -> Either String ByteString +limitDecompress1 limit = \case Passthrough bs -> Right bs Compressed (Large bs) -> case Z1.decompressedSize bs of - Just sz | sz <= limit -> case Z1.decompress bs of - Z1.Error e -> Left e - Z1.Skip -> Right mempty - Z1.Decompress bs' -> Right bs' + Just sz | sz <= limit -> decompress_ bs _ -> Left $ "compressed size not specified or exceeds " <> show limit + +decompress_ :: ByteString -> Either String ByteString +decompress_ bs = case Z1.decompress bs of + Z1.Error e -> Left e + Z1.Skip -> Right mempty + Z1.Decompress bs' -> Right bs'