rs-eda 0.1.1

rust EDA event-driven framework
Documentation
use serde_json::Value;

use crate::engine::Engine;

pub trait PluginOptions {
    /**插件的名字 */
    fn name(&self) -> &str;
    /**插件的依赖,依赖值为插件名字 */
    fn deps(&self) -> Vec<&str>;
    /**获取插件数据 */
    fn get_data(&self) -> Option<Value>;
    /**插件的安装方法 */
    fn install(&mut self, engine: &mut Engine);
    /**插件的销毁方法 */
    fn dispose(&mut self, engine: &mut Engine);
}

pub struct TestAPlugin {
    camera: String,
}
impl TestAPlugin {
    pub fn new() -> Self {
        Self {
            camera: "".to_string(),
        }
    }
}
impl PluginOptions for TestAPlugin {
    fn name(&self) -> &str {
        "TestAPlugin"
    }
    fn deps(&self) -> Vec<&str> {
        vec![]
    }
    fn get_data(&self) -> Option<Value> {
        Some(serde_json::json!({
            "camera": self.camera
        }))
    }
    fn install(&mut self, engine: &mut Engine) {
        self.camera = "camera".to_string();
        println!("-----安装TestAPlugin----{}", self.camera);
    }
    fn dispose(&mut self, engine: &mut Engine) {
        println!("-----销毁TestAPlugin----");
    }
}

pub struct TestBPlugin {}
impl TestBPlugin {
    pub fn new() -> Self {
        Self {}
    }
}
impl PluginOptions for TestBPlugin {
    fn name(&self) -> &str {
        "TestBPlugin"
    }
    fn deps(&self) -> Vec<&str> {
        vec!["TestAPlugin"]
    }
    fn get_data(&self) -> Option<Value> {
        None
    }
    fn install(&mut self, engine: &mut Engine) {
        let data = engine.plugin_data("TestAPlugin");
        println!("-----安装TestBPlugin----{:?}", data);
    }
    fn dispose(&mut self, engine: &mut Engine) {
        println!("-----销毁TestBPlugin----");
    }
}