code: func NewUnaryClientInterceptor(next grpc.UnaryClientInterceptor) grpc.UnaryClientInterceptor {
  	return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) (err error) {
  		started := clock.Now(ctx)
  		defer func() {
  			reportClientRPCMetrics(ctx, method, err, clock.Now(ctx).Sub(started))
  		}()
  		if next != nil {
  			return next(ctx, method, req, reply, cc, invoker, opts...)
  		}
  		return invoker(ctx, method, req, reply, cc, opts...)
  	}
  }
docs: // NewUnaryClientInterceptor returns an interceptor that gathers RPC call
  // metrics and sends them to tsmon.
  //
  // It can be optionally chained with other interceptor. The reported metrics
  // include time spent in this other interceptor too.
  //
  // Can be passed to a gRPC client via WithUnaryInterceptor(...) dial option.
  //
  // Use option.WithGRPCDialOption(grpc.WithUnaryInterceptor(...)) when
  // instrumenting Google Cloud API clients.
  //
  // It assumes the RPC context has tsmon initialized already.