use std::collections::HashMap;
pub trait PluginServiceBridge: Send + Sync + 'static {
fn as_any(&self) -> &dyn std::any::Any;
fn translate(&self, plugin_name: &str, key: &str, args: &HashMap<String, String>) -> String;
fn current_locale(&self) -> String;
fn set_js_execution_state(&self, state: String);
fn clear_js_execution_state(&self);
fn get_theme_schema(&self) -> serde_json::Value;
fn get_builtin_themes(&self) -> serde_json::Value;
fn get_all_themes(&self) -> serde_json::Value;
fn register_plugin_strings(
&self,
_plugin_name: &str,
_strings: HashMap<String, HashMap<String, String>>,
) {
}
fn unregister_plugin_strings(&self, _plugin_name: &str) {}
fn register_command(&self, command: crate::command::Command);
fn unregister_command(&self, name: &str);
fn unregister_commands_by_prefix(&self, prefix: &str);
fn unregister_commands_by_plugin(&self, plugin_name: &str);
fn plugins_dir(&self) -> std::path::PathBuf;
fn config_dir(&self) -> std::path::PathBuf;
fn data_dir(&self) -> std::path::PathBuf;
fn get_theme_data(&self, _name: &str) -> Option<serde_json::Value> {
None
}
fn save_theme_file(&self, _name: &str, _content: &str) -> Result<String, String> {
Err("not implemented".to_string())
}
fn theme_file_exists(&self, _name: &str) -> bool {
false
}
}
pub struct NoopServiceBridge;
impl PluginServiceBridge for NoopServiceBridge {
fn as_any(&self) -> &dyn std::any::Any {
self
}
fn translate(&self, _plugin_name: &str, key: &str, _args: &HashMap<String, String>) -> String {
key.to_string()
}
fn current_locale(&self) -> String {
"en".to_string()
}
fn set_js_execution_state(&self, _state: String) {}
fn clear_js_execution_state(&self) {}
fn get_theme_schema(&self) -> serde_json::Value {
serde_json::Value::Null
}
fn get_builtin_themes(&self) -> serde_json::Value {
serde_json::Value::Null
}
fn get_all_themes(&self) -> serde_json::Value {
serde_json::Value::Null
}
fn register_plugin_strings(
&self,
_plugin_name: &str,
_strings: HashMap<String, HashMap<String, String>>,
) {
}
fn unregister_plugin_strings(&self, _plugin_name: &str) {}
fn register_command(&self, _command: crate::command::Command) {}
fn unregister_command(&self, _name: &str) {}
fn unregister_commands_by_prefix(&self, _prefix: &str) {}
fn unregister_commands_by_plugin(&self, _plugin_name: &str) {}
fn plugins_dir(&self) -> std::path::PathBuf {
std::path::PathBuf::from("/tmp/plugins")
}
fn config_dir(&self) -> std::path::PathBuf {
std::path::PathBuf::from("/tmp/config")
}
fn data_dir(&self) -> std::path::PathBuf {
std::path::PathBuf::from("/tmp/data")
}
}