@@ -19,18 +19,30 @@ use std::pin::Pin;
1919use std:: sync:: Arc ;
2020
2121#[ derive( Clone ) ]
22- pub struct VssService {
23- store : Arc < dyn KvStore > ,
24- authorizer : Arc < dyn Authorizer > ,
22+ pub struct VssService < K , A >
23+ where
24+ K : KvStore ,
25+ A : Authorizer ,
26+ {
27+ store : Arc < K > ,
28+ authorizer : Arc < A > ,
2529}
2630
27- impl VssService {
28- pub ( crate ) fn new ( store : Arc < dyn KvStore > , authorizer : Arc < dyn Authorizer > ) -> Self {
31+ impl < K , A > VssService < K , A >
32+ where
33+ K : KvStore ,
34+ A : Authorizer ,
35+ {
36+ pub ( crate ) fn new ( store : Arc < K > , authorizer : Arc < A > ) -> Self {
2937 Self { store, authorizer }
3038 }
3139}
3240
33- impl Service < Request < Incoming > > for VssService {
41+ impl < K , A > Service < Request < Incoming > > for VssService < K , A >
42+ where
43+ K : KvStore + ' static ,
44+ A : Authorizer + ' static ,
45+ {
3446 type Response = Response < Full < Bytes > > ;
3547 type Error = hyper:: Error ;
3648 type Future = Pin < Box < dyn Future < Output = Result < Self :: Response , Self :: Error > > + Send > > ;
@@ -65,35 +77,36 @@ impl Service<Request<Incoming>> for VssService {
6577 }
6678}
6779
68- async fn handle_get_object_request (
69- store : Arc < dyn KvStore > , user_token : String , request : GetObjectRequest ,
80+ async fn handle_get_object_request < K : KvStore > (
81+ store : Arc < K > , user_token : String , request : GetObjectRequest ,
7082) -> Result < GetObjectResponse , VssError > {
7183 store. get ( user_token, request) . await
7284}
73- async fn handle_put_object_request (
74- store : Arc < dyn KvStore > , user_token : String , request : PutObjectRequest ,
85+ async fn handle_put_object_request < K : KvStore > (
86+ store : Arc < K > , user_token : String , request : PutObjectRequest ,
7587) -> Result < PutObjectResponse , VssError > {
7688 store. put ( user_token, request) . await
7789}
78- async fn handle_delete_object_request (
79- store : Arc < dyn KvStore > , user_token : String , request : DeleteObjectRequest ,
90+ async fn handle_delete_object_request < K : KvStore > (
91+ store : Arc < K > , user_token : String , request : DeleteObjectRequest ,
8092) -> Result < DeleteObjectResponse , VssError > {
8193 store. delete ( user_token, request) . await
8294}
83- async fn handle_list_object_request (
84- store : Arc < dyn KvStore > , user_token : String , request : ListKeyVersionsRequest ,
95+ async fn handle_list_object_request < K : KvStore > (
96+ store : Arc < K > , user_token : String , request : ListKeyVersionsRequest ,
8597) -> Result < ListKeyVersionsResponse , VssError > {
8698 store. list_key_versions ( user_token, request) . await
8799}
88100async fn handle_request <
89101 T : Message + Default ,
90102 R : Message ,
91- F : FnOnce ( Arc < dyn KvStore > , String , T ) -> Fut + Send + ' static ,
103+ F : FnOnce ( Arc < K > , String , T ) -> Fut + Send ,
92104 Fut : Future < Output = Result < R , VssError > > + Send ,
105+ K : KvStore + ' static ,
106+ A : Authorizer + ' static ,
93107> (
94- store : Arc < dyn KvStore > , authorizer : Arc < dyn Authorizer > , request : Request < Incoming > ,
95- handler : F ,
96- ) -> Result < <VssService as Service < Request < Incoming > > >:: Response , hyper:: Error > {
108+ store : Arc < K > , authorizer : Arc < A > , request : Request < Incoming > , handler : F ,
109+ ) -> Result < <VssService < K , A > as Service < Request < Incoming > > >:: Response , hyper:: Error > {
97110 let ( parts, body) = request. into_parts ( ) ;
98111 let headers_map = parts
99112 . headers
0 commit comments