A typed-erased RpcTransport, returning the commonly used dynamically-typed error anyhow::Error. Use this type instead of Box<RpcTransport<...>> to work around some sharp edges around actual trait objects.
A struct implementing the RpcService represents the server-side logic of a NanoRPC. The method that needs to be implemented is RpcService::respond, but actual servers would typically call RpcService::respond_raw.
This procedural macro should be put on top of a async_trait trait with name ending in ...Protocol, defining all the function signatures in the RPC protocol. Given a trait of name FooProtocol, the macro