in src/DotPulsar/Internal/Compression/ZstdSharpCompression.cs [30:77]
public static bool TryLoading(out ICompressorFactory? compressorFactory, out IDecompressorFactory? decompressorFactory)
{
try
{
var assembly = Assembly.Load("ZstdSharp");
var definedTypes = assembly.DefinedTypes.ToArray();
var decompressorType = FindDecompressor(definedTypes, "ZstdSharp.Decompressor");
var decompressorMethods = decompressorType.GetMethods(BindingFlags.Public | BindingFlags.Instance);
var unwrapMethod = FindUnwrap(decompressorMethods);
var compressorType = FindCompressor(definedTypes, "ZstdSharp.Compressor");
var compressorMethods = compressorType.GetMethods(BindingFlags.Public | BindingFlags.Instance);
var wrapMethod = FindWrap(compressorMethods);
compressorFactory = new CompressorFactory(PulsarApi.CompressionType.Zstd, () =>
{
var compressor = Activator.CreateInstance(compressorType, 0);
if (compressor is null)
throw new Exception($"Activator.CreateInstance returned null when trying to create a {compressorType.FullName}");
var wrap = (Wrap) wrapMethod.CreateDelegate(typeof(Wrap), compressor);
return new Compressor(CreateCompressor(wrap), (IDisposable) compressor);
});
decompressorFactory = new DecompressorFactory(PulsarApi.CompressionType.Zstd, () =>
{
var decompressor = Activator.CreateInstance(decompressorType);
if (decompressor is null)
throw new Exception($"Activator.CreateInstance returned null when trying to create a {decompressorType.FullName}");
var unwrap = (Unwrap) unwrapMethod.CreateDelegate(typeof(Unwrap), decompressor);
return new Decompressor(CreateDecompressor(unwrap), (IDisposable) decompressor);
});
return CompressionTester.TestCompression(compressorFactory, decompressorFactory);
}
catch
{
// Ignore
}
compressorFactory = null;
decompressorFactory = null;
return false;
}