3
3
#[ macro_use]
4
4
extern crate rocket;
5
5
6
+ use rocket:: State ;
6
7
use rocket_contrib:: json:: Json ;
7
8
use 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
+ }
8
16
9
17
#[ derive( Deserialize , Serialize , Clone ) ]
10
18
struct User {
@@ -15,22 +23,31 @@ struct User {
15
23
type EndpointResult < T > = Result < T , & ' static str > ;
16
24
17
25
#[ get( "/users/<username>" ) ]
18
- fn get_user ( username : String ) -> EndpointResult < Json < User > > {
26
+ fn get_user ( db : State < Database > , username : String ) -> EndpointResult < Json < User > > {
19
27
todo ! ( )
20
28
}
21
29
22
30
#[ delete( "/users/<username>" ) ]
23
- fn delete_user ( username : String ) -> EndpointResult < Json < User > > {
31
+ fn delete_user ( db : State < Database > , username : String ) -> EndpointResult < Json < User > > {
24
32
todo ! ( )
25
33
}
26
34
27
35
#[ 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 > > {
29
37
todo ! ( )
30
38
}
31
39
32
40
fn main ( ) {
41
+ let db = sled_extensions:: Config :: default ( )
42
+ . path ( "./sled_data" )
43
+ . open ( )
44
+ . expect ( "Failed to open sled db" ) ;
33
45
rocket:: ignite ( )
46
+ . manage ( Database {
47
+ users : db
48
+ . open_bincode_tree ( "users" )
49
+ . expect ( "failed to open user tree" ) ,
50
+ } )
34
51
. mount ( "/api/" , routes ! [ get_user, put_user, delete_user] )
35
52
. launch ( ) ;
36
53
}
0 commit comments