use std::sync::Arc;
use std::error::Error;
use std::collections::HashMap;
use sqlx::Pool;
use sqlx::Postgres;
use net_core_api::api::envelope::envelope::Envelope;
use super::network_service_handler::NetworkServiceHandler;
pub struct NetworkServiceHandlerManager {
handlers: HashMap<String, Box<dyn NetworkServiceHandler>>,
}
impl NetworkServiceHandlerManager {
pub fn new(
handlers: HashMap<String, Box<dyn NetworkServiceHandler>>
) -> Self {
Self {
handlers
}
}
pub async fn handle(
&self,
connection_pool: Arc<Pool<Postgres>>,
enveloped_request: Envelope
) -> Result<Envelope, Box<dyn Error + Send + Sync>> {
let handler = self.handlers.get(enveloped_request.get_envelope_type());
if handler.is_none() {
return Err("Error: Tere is no such request available".into());
}
let handler = handler.unwrap();
handler.handle(connection_pool, enveloped_request).await
}
}