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----");
}
}