1use std::collections::HashMap;
2
3pub trait PluginServiceBridge: Send + Sync + 'static {
6 fn as_any(&self) -> &dyn std::any::Any;
8
9 fn translate(&self, plugin_name: &str, key: &str, args: &HashMap<String, String>) -> String;
11
12 fn current_locale(&self) -> String;
14
15 fn set_js_execution_state(&self, state: String);
17
18 fn clear_js_execution_state(&self);
20
21 fn get_theme_schema(&self) -> serde_json::Value;
23
24 fn get_builtin_themes(&self) -> serde_json::Value;
26
27 fn register_plugin_strings(
29 &self,
30 _plugin_name: &str,
31 _strings: HashMap<String, HashMap<String, String>>,
32 ) {
33 }
34
35 fn unregister_plugin_strings(&self, _plugin_name: &str) {}
37
38 fn register_command(&self, command: crate::command::Command);
40
41 fn unregister_command(&self, name: &str);
43
44 fn unregister_commands_by_prefix(&self, prefix: &str);
46
47 fn unregister_commands_by_plugin(&self, plugin_name: &str);
49
50 fn plugins_dir(&self) -> std::path::PathBuf;
52
53 fn config_dir(&self) -> std::path::PathBuf;
55}
56
57pub struct NoopServiceBridge;
59
60impl PluginServiceBridge for NoopServiceBridge {
61 fn as_any(&self) -> &dyn std::any::Any {
62 self
63 }
64 fn translate(&self, _plugin_name: &str, key: &str, _args: &HashMap<String, String>) -> String {
65 key.to_string()
66 }
67 fn current_locale(&self) -> String {
68 "en".to_string()
69 }
70 fn set_js_execution_state(&self, _state: String) {}
71 fn clear_js_execution_state(&self) {}
72 fn get_theme_schema(&self) -> serde_json::Value {
73 serde_json::Value::Null
74 }
75 fn get_builtin_themes(&self) -> serde_json::Value {
76 serde_json::Value::Null
77 }
78 fn register_plugin_strings(
79 &self,
80 _plugin_name: &str,
81 _strings: HashMap<String, HashMap<String, String>>,
82 ) {
83 }
84 fn unregister_plugin_strings(&self, _plugin_name: &str) {}
85 fn register_command(&self, _command: crate::command::Command) {}
86 fn unregister_command(&self, _name: &str) {}
87 fn unregister_commands_by_prefix(&self, _prefix: &str) {}
88 fn unregister_commands_by_plugin(&self, _plugin_name: &str) {}
89 fn plugins_dir(&self) -> std::path::PathBuf {
90 std::path::PathBuf::from("/tmp/plugins")
91 }
92 fn config_dir(&self) -> std::path::PathBuf {
93 std::path::PathBuf::from("/tmp/config")
94 }
95}