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 fn get_theme_data(&self, _name: &str) -> Option<serde_json::Value> {
58 None
59 }
60
61 fn save_theme_file(&self, _name: &str, _content: &str) -> Result<String, String> {
64 Err("not implemented".to_string())
65 }
66
67 fn theme_file_exists(&self, _name: &str) -> bool {
69 false
70 }
71}
72
73pub struct NoopServiceBridge;
75
76impl PluginServiceBridge for NoopServiceBridge {
77 fn as_any(&self) -> &dyn std::any::Any {
78 self
79 }
80 fn translate(&self, _plugin_name: &str, key: &str, _args: &HashMap<String, String>) -> String {
81 key.to_string()
82 }
83 fn current_locale(&self) -> String {
84 "en".to_string()
85 }
86 fn set_js_execution_state(&self, _state: String) {}
87 fn clear_js_execution_state(&self) {}
88 fn get_theme_schema(&self) -> serde_json::Value {
89 serde_json::Value::Null
90 }
91 fn get_builtin_themes(&self) -> serde_json::Value {
92 serde_json::Value::Null
93 }
94 fn register_plugin_strings(
95 &self,
96 _plugin_name: &str,
97 _strings: HashMap<String, HashMap<String, String>>,
98 ) {
99 }
100 fn unregister_plugin_strings(&self, _plugin_name: &str) {}
101 fn register_command(&self, _command: crate::command::Command) {}
102 fn unregister_command(&self, _name: &str) {}
103 fn unregister_commands_by_prefix(&self, _prefix: &str) {}
104 fn unregister_commands_by_plugin(&self, _plugin_name: &str) {}
105 fn plugins_dir(&self) -> std::path::PathBuf {
106 std::path::PathBuf::from("/tmp/plugins")
107 }
108 fn config_dir(&self) -> std::path::PathBuf {
109 std::path::PathBuf::from("/tmp/config")
110 }
111}