zbus-lib 0.1.6

zbus rust rpc client and server
Documentation
struct MessageHandler {
    handlers: Vec<Arc<dyn Handler + Sync + Send + 'static>>,
}


impl MessageHandler {
    fn add_handler<H>(&mut self, handler: H) where H: Handler + Send + Sync + 'static {
        self.handlers.push(Arc::new(handler));
    }
    fn handle(&self) {
        for i in 0..25 {
            let message = String::from("zxj");
            self.message_handler(message);
        }
    }
    fn message_handler(&self, message: String) {
        for handler in &self.handlers {
            let handler = handler.clone();
            let message = message.clone();
            thread::spawn(move || {
                handler.handle(message);
            });
        }
    }
}

use std::thread;
use std::sync::Arc;
use std::future::Future;

struct InstrctHandler {}

impl Handler for InstrctHandler {
    fn handle(&self, message: String) {
        println!("instrct handle is {}", message);
    }
}

struct ActiveHandler {}

impl Handler for ActiveHandler {
    fn handle(&self, message: String) {
        println!("active handle is {}", message);
    }
}

fn main() {
    let mut msg_handler = MessageHandler {
        handlers: Vec::new()
    };
    msg_handler.add_handler(ActiveHandler {});
    msg_handler.add_handler(InstrctHandler {});
    msg_handler.handle();
}

trait Handler {
    fn handle(&self, message: String) {
        println!("msg is {}", message);
    }
}

fn get_handler<F, H>() -> F
    where F: Fn() -> H,
          H: Future<Output=String>,
{
    sync || "name".to_string()
}