1use serde_json::Value;
2
3use crate::engine::Engine;
4
5pub trait PluginOptions {
6 fn name(&self) -> &str;
8 fn deps(&self) -> Vec<&str>;
10 fn get_data(&self) -> Option<Value>;
12 fn install(&mut self, engine: &mut Engine);
14 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}