server-watchdog 0.1.0

A server monitoring and remote control tool via messenger.
Documentation

use dyn_clone::{clone_trait_object, DynClone};
use async_trait::async_trait;
use tokio::sync::mpsc::Sender;
use crate::application::worker::Worker;
use crate::domain::client::Message;
use crate::domain::config::ClientConfig;
use crate::infrastructure::client::telegram::TelegramClient;

#[async_trait]
pub trait Client : Worker + DynClone + Send + Sync {
    async fn send_message(&self, chat_id: &str, data: &str) -> bool;
    fn subscribe(&mut self, tx: Sender<Message>);
}

pub fn from(config: ClientConfig) -> Option<Box<dyn Client>> {
    match config.kind.as_str() {
        "telegram" => {
            let token = config.token?;
            Some(Box::new(TelegramClient::new(config.name, token)))
        }
        _ => None,
    }
}

clone_trait_object!(Client);