rs_eda/plugin/
mod.rs

1use serde_json::Value;
2
3use crate::engine::Engine;
4
5pub trait PluginOptions {
6    /**插件的名字 */
7    fn name(&self) -> &str;
8    /**插件的依赖,依赖值为插件名字 */
9    fn deps(&self) -> Vec<&str>;
10    /**获取插件数据 */
11    fn get_data(&self) -> Option<Value>;
12    /**插件的安装方法 */
13    fn install(&mut self, engine: &mut Engine);
14    /**插件的销毁方法 */
15    fn dispose(&mut self, engine: &mut Engine);
16}
17
18pub struct TestAPlugin {
19    camera: String,
20}
21impl TestAPlugin {
22    pub fn new() -> Self {
23        Self {
24            camera: "".to_string(),
25        }
26    }
27}
28impl PluginOptions for TestAPlugin {
29    fn name(&self) -> &str {
30        "TestAPlugin"
31    }
32    fn deps(&self) -> Vec<&str> {
33        vec![]
34    }
35    fn get_data(&self) -> Option<Value> {
36        Some(serde_json::json!({
37            "camera": self.camera
38        }))
39    }
40    fn install(&mut self, engine: &mut Engine) {
41        self.camera = "camera".to_string();
42        println!("-----安装TestAPlugin----{}", self.camera);
43    }
44    fn dispose(&mut self, engine: &mut Engine) {
45        println!("-----销毁TestAPlugin----");
46    }
47}
48
49pub struct TestBPlugin {}
50impl TestBPlugin {
51    pub fn new() -> Self {
52        Self {}
53    }
54}
55impl PluginOptions for TestBPlugin {
56    fn name(&self) -> &str {
57        "TestBPlugin"
58    }
59    fn deps(&self) -> Vec<&str> {
60        vec!["TestAPlugin"]
61    }
62    fn get_data(&self) -> Option<Value> {
63        None
64    }
65    fn install(&mut self, engine: &mut Engine) {
66        let data = engine.plugin_data("TestAPlugin");
67        println!("-----安装TestBPlugin----{:?}", data);
68    }
69    fn dispose(&mut self, engine: &mut Engine) {
70        println!("-----销毁TestBPlugin----");
71    }
72}