@@ -21,12 +21,12 @@ Add dependencies in your `Cargo.toml`.
2121
2222``` toml
2323[dependencies ]
24- tokio = " 0.3.6 "
25- rsocket_rust = " 0.7.0 "
24+ tokio = " 1.0 "
25+ rsocket_rust = " 0.7"
2626
2727# add transport dependencies:
28- # rsocket_rust_transport_tcp = "0.7.0 "
29- # rsocket_rust_transport_websocket = "0.7.0 "
28+ # rsocket_rust_transport_tcp = "0.7"
29+ # rsocket_rust_transport_websocket = "0.7"
3030```
3131
3232### Server
@@ -74,7 +74,75 @@ async fn main() -> Result<()> {
7474 . build ();
7575 let res = cli . request_response (req ). await ? ;
7676 println! (" got: {:?}" , res );
77- cli . close ();
77+
78+ // If you want to block until socket disconnected.
79+ cli . wait_for_close (). await ;
80+
81+ Ok (())
82+ }
83+
84+ ```
85+
86+ ### Implement RSocket trait
87+
88+ Example for access Redis([ crates] ( https://crates.io/crates/redis ) ):
89+
90+ > NOTICE: add dependency in Cargo.toml => redis = { version = "0.19.0", features = [ "aio" ] }
91+
92+ ``` rust
93+ use redis :: Client as RedisClient ;
94+ use rsocket_rust :: async_trait;
95+ use rsocket_rust :: prelude :: * ;
96+ use rsocket_rust :: Result ;
97+ use std :: str :: FromStr ;
98+
99+ #[derive(Clone )]
100+ pub struct RedisDao {
101+ inner : RedisClient ,
102+ }
103+
104+ // Create RedisDao from str.
105+ // Example: RedisDao::from_str("redis://127.0.0.1").expect("Connect redis failed!");
106+ impl FromStr for RedisDao {
107+ type Err = redis :: RedisError ;
108+
109+ fn from_str (s : & str ) -> std :: result :: Result <Self , Self :: Err > {
110+ let client = redis :: Client :: open (s )? ;
111+ Ok (RedisDao { inner : client })
112+ }
113+ }
114+
115+ #[async_trait]
116+ impl RSocket for RedisDao {
117+ async fn request_response (& self , req : Payload ) -> Result <Option <Payload >> {
118+ let client = self . inner. clone ();
119+ let mut conn = client . get_async_connection (). await ? ;
120+ let value : redis :: RedisResult <Option <String >> = redis :: cmd (" GET" )
121+ . arg (& [req . data_utf8 ()])
122+ . query_async (& mut conn )
123+ . await ;
124+ match value {
125+ Ok (Some (value )) => Ok (Some (Payload :: builder (). set_data_utf8 (& value ). build ())),
126+ Ok (None ) => Ok (None ),
127+ Err (e ) => Err (e . into ()),
128+ }
129+ }
130+
131+ async fn metadata_push (& self , _req : Payload ) -> Result <()> {
132+ todo! ()
133+ }
134+
135+ async fn fire_and_forget (& self , _req : Payload ) -> Result <()> {
136+ todo! ()
137+ }
138+
139+ fn request_stream (& self , _req : Payload ) -> Flux <Result <Payload >> {
140+ todo! ()
141+ }
142+
143+ fn request_channel (& self , _reqs : Flux <Result <Payload >>) -> Flux <Result <Payload >> {
144+ todo! ()
145+ }
78146}
79147
80148```
0 commit comments