net_component/handler/
network_service_handler_manager.rs1use std::sync::Arc;
2use std::error::Error;
3use std::collections::HashMap;
4
5use sqlx::Pool;
6use sqlx::Postgres;
7
8use net_core_api::api::envelope::envelope::Envelope;
9
10use super::network_service_handler::NetworkServiceHandler;
11
12pub struct NetworkServiceHandlerManager {
13 handlers: HashMap<String, Box<dyn NetworkServiceHandler>>,
14}
15
16impl NetworkServiceHandlerManager {
17 pub fn new(
18 handlers: HashMap<String, Box<dyn NetworkServiceHandler>>
19 ) -> Self {
20 Self {
21 handlers
22 }
23 }
24
25 pub async fn handle(
26 &self,
27 connection_pool: Arc<Pool<Postgres>>,
28 enveloped_request: Envelope
29 ) -> Result<Envelope, Box<dyn Error + Send + Sync>> {
30 let handler = self.handlers.get(enveloped_request.get_envelope_type());
31 if handler.is_none() {
32 return Err("Error: Tere is no such request available".into());
33 }
34 let handler = handler.unwrap();
35
36 handler.handle(connection_pool, enveloped_request).await
37 }
38}