@@ -48,7 +48,7 @@ use tower_http::{
48
48
limit:: RequestBodyLimitLayer ,
49
49
set_header:: SetResponseHeaderLayer ,
50
50
} ;
51
- use uuid :: Uuid ;
51
+ use ulid :: Ulid ;
52
52
53
53
struct Session {
54
54
hash : [ u8 ; 32 ] ,
@@ -114,12 +114,12 @@ impl Session {
114
114
#[ derive( Clone , Default ) ]
115
115
struct Sessions {
116
116
// TODO: is that global lock alright?
117
- inner : Arc < RwLock < HashMap < Uuid , Session > > > ,
117
+ inner : Arc < RwLock < HashMap < Ulid , Session > > > ,
118
118
ttl : Duration ,
119
119
}
120
120
121
121
impl Sessions {
122
- async fn insert ( self , id : Uuid , session : Session , ttl : Duration ) {
122
+ async fn insert ( self , id : Ulid , session : Session , ttl : Duration ) {
123
123
self . inner . write ( ) . await . insert ( id, session) ;
124
124
// TODO: cancel this task when an item gets deleted
125
125
tokio:: task:: spawn ( async move {
@@ -130,7 +130,7 @@ impl Sessions {
130
130
}
131
131
132
132
impl Deref for Sessions {
133
- type Target = RwLock < HashMap < Uuid , Session > > ;
133
+ type Target = RwLock < HashMap < Ulid , Session > > ;
134
134
135
135
fn deref ( & self ) -> & Self :: Target {
136
136
& self . inner
@@ -159,8 +159,7 @@ async fn new_session(
159
159
payload : Bytes ,
160
160
) -> impl IntoResponse {
161
161
let ttl = sessions. ttl ;
162
- // TODO: should we use something else? Check for colisions?
163
- let id = Uuid :: new_v4 ( ) ;
162
+ let id = Ulid :: new ( ) ;
164
163
let content_type =
165
164
content_type. map_or ( mime:: APPLICATION_OCTET_STREAM , |TypedHeader ( c) | c. into ( ) ) ;
166
165
let session = Session :: new ( payload, content_type, ttl) ;
@@ -172,7 +171,7 @@ async fn new_session(
172
171
( StatusCode :: CREATED , headers, additional_headers)
173
172
}
174
173
175
- async fn delete_session ( State ( sessions) : State < Sessions > , Path ( id) : Path < Uuid > ) -> StatusCode {
174
+ async fn delete_session ( State ( sessions) : State < Sessions > , Path ( id) : Path < Ulid > ) -> StatusCode {
176
175
if sessions. write ( ) . await . remove ( & id) . is_some ( ) {
177
176
StatusCode :: NO_CONTENT
178
177
} else {
@@ -182,7 +181,7 @@ async fn delete_session(State(sessions): State<Sessions>, Path(id): Path<Uuid>)
182
181
183
182
async fn update_session (
184
183
State ( sessions) : State < Sessions > ,
185
- Path ( id) : Path < Uuid > ,
184
+ Path ( id) : Path < Ulid > ,
186
185
content_type : Option < TypedHeader < ContentType > > ,
187
186
if_match : Option < TypedHeader < IfMatch > > ,
188
187
payload : Bytes ,
@@ -206,7 +205,7 @@ async fn update_session(
206
205
207
206
async fn get_session (
208
207
State ( sessions) : State < Sessions > ,
209
- Path ( id) : Path < Uuid > ,
208
+ Path ( id) : Path < Ulid > ,
210
209
if_none_match : Option < TypedHeader < IfNoneMatch > > ,
211
210
) -> Response {
212
211
let sessions = sessions. read ( ) . await ;
0 commit comments