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 get_all_themes(&self) -> serde_json::Value;
31
32 fn register_plugin_strings(
34 &self,
35 _plugin_name: &str,
36 _strings: HashMap<String, HashMap<String, String>>,
37 ) {
38 }
39
40 fn unregister_plugin_strings(&self, _plugin_name: &str) {}
42
43 fn register_command(&self, command: crate::command::Command);
45
46 fn unregister_command(&self, name: &str);
48
49 fn unregister_commands_by_prefix(&self, prefix: &str);
51
52 fn unregister_commands_by_plugin(&self, plugin_name: &str);
54
55 fn plugins_dir(&self) -> std::path::PathBuf;
57
58 fn config_dir(&self) -> std::path::PathBuf;
60
61 fn data_dir(&self) -> std::path::PathBuf;
64
65 fn get_theme_data(&self, _name: &str) -> Option<serde_json::Value> {
67 None
68 }
69
70 fn save_theme_file(&self, _name: &str, _content: &str) -> Result<String, String> {
73 Err("not implemented".to_string())
74 }
75
76 fn theme_file_exists(&self, _name: &str) -> bool {
78 false
79 }
80}
81
82pub struct NoopServiceBridge;
84
85impl PluginServiceBridge for NoopServiceBridge {
86 fn as_any(&self) -> &dyn std::any::Any {
87 self
88 }
89 fn translate(&self, _plugin_name: &str, key: &str, _args: &HashMap<String, String>) -> String {
90 key.to_string()
91 }
92 fn current_locale(&self) -> String {
93 "en".to_string()
94 }
95 fn set_js_execution_state(&self, _state: String) {}
96 fn clear_js_execution_state(&self) {}
97 fn get_theme_schema(&self) -> serde_json::Value {
98 serde_json::Value::Null
99 }
100 fn get_builtin_themes(&self) -> serde_json::Value {
101 serde_json::Value::Null
102 }
103 fn get_all_themes(&self) -> serde_json::Value {
104 serde_json::Value::Null
105 }
106 fn register_plugin_strings(
107 &self,
108 _plugin_name: &str,
109 _strings: HashMap<String, HashMap<String, String>>,
110 ) {
111 }
112 fn unregister_plugin_strings(&self, _plugin_name: &str) {}
113 fn register_command(&self, _command: crate::command::Command) {}
114 fn unregister_command(&self, _name: &str) {}
115 fn unregister_commands_by_prefix(&self, _prefix: &str) {}
116 fn unregister_commands_by_plugin(&self, _plugin_name: &str) {}
117 fn plugins_dir(&self) -> std::path::PathBuf {
118 std::path::PathBuf::from("/tmp/plugins")
119 }
120 fn config_dir(&self) -> std::path::PathBuf {
121 std::path::PathBuf::from("/tmp/config")
122 }
123 fn data_dir(&self) -> std::path::PathBuf {
124 std::path::PathBuf::from("/tmp/data")
125 }
126}