simengine 0.1.2

A plugin-based simulation engine runtime and plugin API
Documentation
use std::collections::VecDeque;

#[derive(Debug, Clone)]
pub struct Message {
    pub topic: String,
    pub payload: Vec<u8>,
}

pub trait NetworkInterface {
    fn publish(&mut self, topic: &str, payload: &[u8]);
    fn drain(&mut self) -> Vec<Message>;
}

#[derive(Default)]
pub struct InProcessNetwork {
    messages: VecDeque<Message>,
}

impl NetworkInterface for InProcessNetwork {
    fn publish(&mut self, topic: &str, payload: &[u8]) {
        self.messages.push_back(Message {
            topic: topic.to_string(),
            payload: payload.to_vec(),
        });
    }

    fn drain(&mut self) -> Vec<Message> {
        self.messages.drain(..).collect()
    }
}