pub mod loader;
use crate::message::common::Message;
use crate::services::certificate::CertificateServiceBinder;
use crate::services::name::NameService;
use crate::services::transport::TransportService;
pub enum CLIStatus{
Done,
NamespaceChange(Vec<String>),
}
#[derive(PartialEq)]
pub enum HostType{
CLI,
Broker,
Peer
}
pub trait ModuleDataBus: Send + Sync{
fn get_transport_service(&self) -> Box<dyn TransportService>;
fn get_name_service(&self) -> Box<dyn NameService>;
fn get_certificate_service(&self) -> Box<CertificateServiceBinder>;
fn get_host_type(&self) -> HostType;
fn get_host_id(&self) -> Option<u128>;
}
pub trait MilkywayModule: Send + Sync{
fn get_id(&self) -> u64;
fn get_commands(&self) -> Vec<String>;
fn on_load(&mut self, data_bus: Box<dyn ModuleDataBus>);
fn on_cli_command(&mut self, command: Vec<String>, arguments: Vec<String>) -> CLIStatus;
fn on_server_receive(&self, packet: &Message);
fn on_client_receive(&self, packet: &Message);
fn on_cli_receive(&self, packet: &Message);
}