martinitus / osgiliath-rs Goto Github PK
View Code? Open in Web Editor NEWA prototype rust macro bridging `tower::Service` with `async_trait`.
License: MIT License
A prototype rust macro bridging `tower::Service` with `async_trait`.
License: MIT License
One of the nice features of layers provided by the tower framework, is that they can enrich/manipulate/process metadata that is attached with the requests and responses (e.g. HTTP Headers).
It would be nice to have a mechanism to provide extra metadata with the request/response enums. One possibility would be to use generic (Request|Response)Data
structures which are templated with the actual trait specific generated request response enums.
Something like
struct<T> Response{
headers: HashMap<String,String>
body: T // This would be the macro generated TheTraitResponse
}
Convenience converters From/Into
from TheTraitResponse
to Response<TheTraitResponse>
could also be created.
The current hacks essentially unwrap
and panic
at various locations.
Instead it would be good to use appropriate result types.
It might be best to support only async traits that exclusively use results as return values (even for Unit returns) in their methods. Otherwise there is sort of a symmetry break when going from async trait to service back to async trait. One can see this in the generated blanket implementations let response = self.call(#request_ident::#variant_ident {#(#args),*}).await.unwrap();
. Where instead of unwrapping, an error from the tower.call invocation should be mapped to the async trait result type instead.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.