using Grpc.Core; using Grpc.Core.Interceptors; namespace FrostFS.SDK.SmokeTests; [System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1062:Validate arguments of public methods", Justification = "parameters are provided by GRPC infrastructure")] public class CallbackInterceptor(Action<string>? callback = null) : Interceptor { public override AsyncUnaryCall<TResponse> AsyncUnaryCall<TRequest, TResponse>( TRequest request, ClientInterceptorContext<TRequest, TResponse> context, AsyncUnaryCallContinuation<TRequest, TResponse> continuation) { var call = continuation(request, context); return new AsyncUnaryCall<TResponse>( HandleUnaryResponse(call), call.ResponseHeadersAsync, call.GetStatus, call.GetTrailers, call.Dispose); } private async Task<TResponse> HandleUnaryResponse<TResponse>(AsyncUnaryCall<TResponse> call) { var response = await call; callback?.Invoke($"elapsed"); return response; } }