using System.Text; using Elsa.Workflows.Management.Contracts; using IronCompress; namespace Elsa.Workflows.Management.Compression; /// /// Represents a ZSTD compression strategy. /// public class Zstd : ICompressionCodec { private Iron Iron { get; set; } = new(); /// public ValueTask CompressAsync(string input, CancellationToken cancellationToken = default) { var inputBytes = Encoding.UTF8.GetBytes(input); var span = inputBytes.AsSpan(); var result = Iron.Compress(Codec.Zstd, span); var compressedBytes = result.AsSpan(); var compressedString = Convert.ToBase64String(compressedBytes); return new (compressedString); } /// public ValueTask DecompressAsync(string input, CancellationToken cancellationToken = default) { var inputBytes = Convert.FromBase64String(input); var span = inputBytes.AsSpan(); var result = Iron.Decompress(Codec.Zstd, span); var decompressedBytes = result.AsSpan(); var decompressedString = Encoding.UTF8.GetString(decompressedBytes); return new (decompressedString); } }