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 terminal_dir(&self, working_dir: &std::path::Path) -> std::path::PathBuf {
72 let _ = working_dir;
73 self.data_dir().join("terminals")
74 }
75
76 fn working_data_dir(&self, working_dir: &std::path::Path) -> std::path::PathBuf {
82 let _ = working_dir;
83 self.data_dir().join("workdirs")
84 }
85
86 fn get_theme_data(&self, _name: &str) -> Option<serde_json::Value> {
88 None
89 }
90
91 fn save_theme_file(&self, _name: &str, _content: &str) -> Result<String, String> {
94 Err("not implemented".to_string())
95 }
96
97 fn theme_file_exists(&self, _name: &str) -> bool {
99 false
100 }
101}
102
103pub struct NoopServiceBridge;
105
106impl PluginServiceBridge for NoopServiceBridge {
107 fn as_any(&self) -> &dyn std::any::Any {
108 self
109 }
110 fn translate(&self, _plugin_name: &str, key: &str, _args: &HashMap<String, String>) -> String {
111 key.to_string()
112 }
113 fn current_locale(&self) -> String {
114 "en".to_string()
115 }
116 fn set_js_execution_state(&self, _state: String) {}
117 fn clear_js_execution_state(&self) {}
118 fn get_theme_schema(&self) -> serde_json::Value {
119 serde_json::Value::Null
120 }
121 fn get_builtin_themes(&self) -> serde_json::Value {
122 serde_json::Value::Null
123 }
124 fn get_all_themes(&self) -> serde_json::Value {
125 serde_json::Value::Null
126 }
127 fn register_plugin_strings(
128 &self,
129 _plugin_name: &str,
130 _strings: HashMap<String, HashMap<String, String>>,
131 ) {
132 }
133 fn unregister_plugin_strings(&self, _plugin_name: &str) {}
134 fn register_command(&self, _command: crate::command::Command) {}
135 fn unregister_command(&self, _name: &str) {}
136 fn unregister_commands_by_prefix(&self, _prefix: &str) {}
137 fn unregister_commands_by_plugin(&self, _plugin_name: &str) {}
138 fn plugins_dir(&self) -> std::path::PathBuf {
139 std::path::PathBuf::from("/tmp/plugins")
140 }
141 fn config_dir(&self) -> std::path::PathBuf {
142 std::path::PathBuf::from("/tmp/config")
143 }
144 fn data_dir(&self) -> std::path::PathBuf {
145 std::path::PathBuf::from("/tmp/data")
146 }
147}