elsa-core/src/modules/Elsa.Common/Codecs/Zstd.cs

36 lines
1.1 KiB
C#
Raw Normal View History

using System.Text;
using IronCompress;
2025-04-03 13:30:35 +00:00
namespace Elsa.Common.Codecs;
/// <summary>
/// Represents a ZSTD compression strategy.
/// </summary>
public class Zstd : ICompressionCodec
{
private Iron Iron { get; set; } = new();
/// <inheritdoc />
public ValueTask<string> 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);
}
/// <inheritdoc />
public ValueTask<string> 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);
}
}