logdash 1.0.3

Logdash.io simple client
Documentation
use super::{MessageType, Propagator, PropagatorConfig};
use std::{
    marker::PhantomData,
    sync::mpsc::{Receiver, SyncSender, sync_channel},
};
pub trait WorkerJob {
    fn job(cfg: PropagatorConfig, rx: Receiver<MessageType>);
}

pub struct Worker<P: WorkerJob> {
    sender: SyncSender<MessageType>,
    _propagator: PhantomData<P>,
}

impl<T: WorkerJob> Worker<T> {
    pub fn new(config: PropagatorConfig) -> Self {
        let (tx, rx) = sync_channel(30);
        std::thread::Builder::new()
            .name("logdash-worker".into())
            .spawn(move || T::job(config, rx))
            .unwrap();
        Self {
            sender: tx,
            _propagator: PhantomData,
        }
    }
}

impl<T: WorkerJob + Send + Sync + 'static> Propagator for Worker<T> {
    fn propagate_log(&self, msg: crate::log::LogMessage) {
        self.sender.send(MessageType::Log(msg)).unwrap();
    }

    fn propagate_metric(&self, msg: crate::metric::MetricMessage) {
        self.sender.send(MessageType::Metric(msg)).unwrap();
    }
}