internal static TResponse Call <TRequest, TResponse>(TRequest request, NativeMethod nativeMethod) where TRequest : IMessage where TResponse : IMessage, new() { using var memory = new UnmanagedMemory(); var code = nativeMethod(memory.ToByteBuffer(request.ToByteArray()), out var response, out var error); memory.ThrowOnError(error); var res = new TResponse(); res.MergeFrom(memory.ToArray(response)); return(res); }