33#[ macro_use]
44extern crate rocket;
55
6+ use rocket:: State ;
67use rocket_contrib:: json:: Json ;
78use serde:: { Deserialize , Serialize } ;
9+ use sled_extensions:: bincode:: Tree ;
10+ use sled_extensions:: DbExt ;
11+ use std:: error:: Error ;
12+
13+ struct Database {
14+ users : Tree < User > ,
15+ }
816
917#[ derive( Deserialize , Serialize , Clone ) ]
1018struct User {
@@ -15,22 +23,31 @@ struct User {
1523type EndpointResult < T > = Result < T , & ' static str > ;
1624
1725#[ get( "/users/<username>" ) ]
18- fn get_user ( username : String ) -> EndpointResult < Json < User > > {
26+ fn get_user ( db : State < Database > , username : String ) -> EndpointResult < Json < User > > {
1927 todo ! ( )
2028}
2129
2230#[ delete( "/users/<username>" ) ]
23- fn delete_user ( username : String ) -> EndpointResult < Json < User > > {
31+ fn delete_user ( db : State < Database > , username : String ) -> EndpointResult < Json < User > > {
2432 todo ! ( )
2533}
2634
2735#[ put( "/users" , data = "<user>" ) ]
28- fn put_user ( user : Json < User > ) -> EndpointResult < Json < User > > {
36+ fn put_user ( db : State < Database > , user : Json < User > ) -> EndpointResult < Json < User > > {
2937 todo ! ( )
3038}
3139
3240fn main ( ) {
41+ let db = sled_extensions:: Config :: default ( )
42+ . path ( "./sled_data" )
43+ . open ( )
44+ . expect ( "Failed to open sled db" ) ;
3345 rocket:: ignite ( )
46+ . manage ( Database {
47+ users : db
48+ . open_bincode_tree ( "users" )
49+ . expect ( "failed to open user tree" ) ,
50+ } )
3451 . mount ( "/api/" , routes ! [ get_user, put_user, delete_user] )
3552 . launch ( ) ;
3653}
0 commit comments