grpc_gateway 0.1.2

A GRPC Gateway which handle the http request and convert into GRPC
Documentation
use std::{collections::HashMap, sync::Mutex};

use crate::utils::model::ServiceRegisterRequest;
use lazy_static::lazy_static;

use crate::utils::service_status::ServiceStatus;

lazy_static! {
    static ref GLOBAL_MAP: Mutex<HashMap<String, String>> = Mutex::new(HashMap::new());
    static ref unavailable_service_map: Mutex<HashMap<String, ServiceStatus>> =
        Mutex::new(HashMap::new());
}

pub trait RegistryTrait {
    fn register(&self, req: ServiceRegisterRequest) -> Option<String>;
    fn discover(&self, service_name: String) -> Option<String>;
}

pub struct ServiceRegistry {}

impl RegistryTrait for ServiceRegistry {
    fn register(&self, req: ServiceRegisterRequest) -> Option<String> {
        let val = format!("http://{}:{}", req.host, req.port);

        match GLOBAL_MAP.lock() {
            Ok(mut mp) => {
                mp.insert(req.service_name, val.to_string());
                Some(val)
            }
            Err(_e) => None,
        }
    }

    fn discover(&self, service_name: String) -> Option<String> {
        match GLOBAL_MAP.lock() {
            Ok(mp) => mp.get(&service_name).cloned(),
            Err(_) => None,
        }
    }
}