defmodule GRPC.ServerInterceptor do
@moduledoc """
Interceptor on server side. See `GRPC.Endpoint`.
"""
alias GRPC.Server.Stream
@type options :: any
@type rpc_return :: {:ok, Stream.t(), struct} | {:ok, Stream.t()} | {:error, GRPC.RPCError.t()}
@type next :: (GRPC.Server.rpc_req(), Stream.t() -> rpc_return)
@callback init(options) :: options
@callback call(GRPC.Server.rpc_req(), stream :: Stream.t(), next, options) :: rpc_return
end
defmodule GRPC.ClientInterceptor do
@moduledoc """
Interceptor on client side. See `GRPC.Stub.connect/2`.
"""
alias GRPC.Client.Stream
@type options :: any
@type req :: struct | nil
@type next :: (Stream.t(), req -> GRPC.Stub.rpc_return())
@callback init(options) :: options
@callback call(stream :: Stream.t(), req, next, options) :: GRPC.Stub.rpc_return()
end