net_component/handler/
network_service_handler_manager.rs

1use 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}