Skip to content

Commit 7112803

Browse files
committed
Try to use generics and type annotations.
1 parent 9df3f3c commit 7112803

File tree

2 files changed

+33
-21
lines changed

2 files changed

+33
-21
lines changed

rust/server/src/main.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ use hyper::server::conn::http1;
1818
use hyper_util::rt::TokioIo;
1919

2020
use crate::vss_service::VssService;
21-
use api::auth::{Authorizer, NoopAuthorizer};
22-
use api::kv_store::KvStore;
21+
use api::auth::NoopAuthorizer;
2322
use impls::postgres_store::PostgresBackendImpl;
2423
use std::sync::Arc;
2524

@@ -59,7 +58,7 @@ fn main() {
5958
match res {
6059
Ok((stream, _)) => {
6160
let io_stream = TokioIo::new(stream);
62-
let vss_service = VssService::new(Arc::clone(&store) as Arc<dyn KvStore>, Arc::clone(&authorizer) as Arc<dyn Authorizer>);
61+
let vss_service = VssService::new(Arc::clone(&store), Arc::clone(&authorizer));
6362
runtime.spawn(async move {
6463
if let Err(err) = http1::Builder::new().serve_connection(io_stream, vss_service).await {
6564
eprintln!("Failed to serve connection: {}", err);

rust/server/src/vss_service.rs

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,30 @@ use std::pin::Pin;
1919
use 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
}
88100
async 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

Comments
 (0)