Comments (4)
The discussed idea was to use associated types:
build_rpc_trait! {
trait Rpc {
fn some_method(&self) -> Result<String, Error>;
fn some_other_method(&self) -> BoxFuture<String, Error>;
}
}
struct RpcDefault;
impl Rpc for RpcDefault {
fn some_method(&self) -> Result<String, Error> { unimplemented!() }
fn some_other_method(&self) -> BoxFuture<String, Error> { unimplemented!() }
}
struct RpcAsync;
impl Rpc For RpcAsync {
type some_method = BoxFuture<String, Error>;
fn some_method(&self) -> BoxFuture<String, Error> { unimplemented!() }
fn some_other_method(&self) -> BoxFuture<String, Error> { unimplemented!() }
}
from jsonrpc.
This is fine but the naming convention is pretty ugly (and rustc is bound to complain; users will need to use some custom lint settings).
We could require that the mandatory #[rpc]
annotation be formatted like this:
#[rpc(name="rpc_nameHere", return=NameHere)]
fn name_here(&self) -> Result<Foo, Error>;
which will generate the associated type with name NameHere
instead of name_here
. This could be optional but this would introduce further parsing complexity in the macro implementation.
from jsonrpc.
Renamed the issue to support arbitrary return types with Into<BoxFuture<String, Error>>
bounds.
We could then provide a special jsonrpc_core::Result
type with proper From<Result>
and Into<BoxFuture>
implementation
from jsonrpc.
The core part of the code already have relaxed requirements and recent switch to proc-macro should allow for more free form types to be returned (for instance an enum encapsulating possible results that implements Into<BoxFuture>
)
from jsonrpc.
Related Issues (20)
- [ws server]: configuration `ServerBuilder::max_payload` causes unexpected allocations HOT 1
- Incompatible with async_trait?
- WS ERROR in frame.rs
- Request log HOT 1
- how to create new handler when new connection income HOT 1
- Example for Client Support not working HOT 2
- how can i define rpc trait in another mod? HOT 2
- did support config http path for rpc handler, like '/rpc/v0'
- how the jsonrpc params like in rpc trait
- skip params when it is `None`
- How to make bi-directional rpc?
- How to asynchronously process a request in the middleware?
- Expose the parts of jsonrpc_core_client necessary to create a custom transport HOT 2
- Implement the HTTP/2 protocol to increase the number of concurrent requests HOT 1
- Notify should allow Obj Params
- The tcp json server example not worked! HOT 3
- support jsonrpc batch
- Is the project still maintained? HOT 2
- Passing params as struct using derive-macro HOT 1
- Stdio client
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jsonrpc.