ass_editor/extensions/
extension.rs1use crate::core::Result;
7use crate::events::DocumentEvent;
8
9use super::command::{ExtensionCommand, ExtensionResult, ExtensionState, MessageLevel};
10use super::context::ExtensionContext;
11use super::info::ExtensionInfo;
12
13#[cfg(feature = "std")]
14use std::collections::HashMap;
15
16#[cfg(not(feature = "std"))]
17use alloc::{collections::BTreeMap as HashMap, string::String, vec::Vec};
18
19pub trait EditorExtension: Send + Sync {
21 fn info(&self) -> &ExtensionInfo;
23
24 fn initialize(&mut self, context: &mut dyn ExtensionContext) -> Result<()>;
26
27 fn shutdown(&mut self, context: &mut dyn ExtensionContext) -> Result<()>;
29
30 fn state(&self) -> ExtensionState;
32
33 fn execute_command(
35 &mut self,
36 command_id: &str,
37 args: &HashMap<String, String>,
38 context: &mut dyn ExtensionContext,
39 ) -> Result<ExtensionResult>;
40
41 fn commands(&self) -> Vec<ExtensionCommand> {
43 Vec::new()
44 }
45
46 fn handle_event(
48 &mut self,
49 _event: &DocumentEvent,
50 _context: &mut dyn ExtensionContext,
51 ) -> Result<()> {
52 Ok(())
54 }
55
56 fn config_schema(&self) -> HashMap<String, String> {
58 HashMap::new()
59 }
60
61 fn validate_config(&self, _config: &HashMap<String, String>) -> Result<()> {
63 Ok(())
64 }
65
66 fn pause(&mut self) -> Result<()> {
68 Ok(())
69 }
70
71 fn resume(&mut self) -> Result<()> {
73 Ok(())
74 }
75
76 fn get_data(&self, _key: &str) -> Option<String> {
78 None
79 }
80
81 fn set_data(&mut self, _key: String, _value: String) -> Result<()> {
83 Ok(())
84 }
85}
86
87pub trait MessageHandler: Send + Sync {
89 fn show(&mut self, message: &str, level: MessageLevel) -> Result<()>;
91}
92
93#[cfg(feature = "std")]
95pub struct StdMessageHandler;
96
97#[cfg(feature = "std")]
98impl MessageHandler for StdMessageHandler {
99 fn show(&mut self, message: &str, level: MessageLevel) -> Result<()> {
100 match level {
101 MessageLevel::Error => eprintln!("[ERROR] {message}"),
102 MessageLevel::Warning => eprintln!("[WARN] {message}"),
103 MessageLevel::Info => println!("[INFO] {message}"),
104 MessageLevel::Success => println!("[SUCCESS] {message}"),
105 }
106 Ok(())
107 }
108}
109
110#[cfg(not(feature = "std"))]
112pub struct NoOpMessageHandler;
113
114#[cfg(not(feature = "std"))]
115impl MessageHandler for NoOpMessageHandler {
116 fn show(&mut self, _message: &str, _level: MessageLevel) -> Result<()> {
117 Ok(())
118 }
119}