elsa-core/src/modules/Elsa.Workflows.Management/Compression/Zstd.cs

37 lines
1.2 KiB
C#
Raw Normal View History

using System.Text;
using Elsa.Workflows.Management.Contracts;
using IronCompress;
namespace Elsa.Workflows.Management.Compression;
/// <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);
}
}