plugin_interfaces/message/
plugin_message.rs1use std::time::{SystemTime, UNIX_EPOCH};
2
3use crate::PluginHandler;
4use serde_json::json;
5
6fn generate_message_id() -> String {
8 let timestamp = SystemTime::now()
9 .duration_since(UNIX_EPOCH)
10 .unwrap()
11 .as_nanos();
12 format!("message_{}", timestamp)
13}
14
15pub fn send_message_to_frontend(_plugin_id: &str, _instance_id: &str, _content: &str) -> bool {
17 let _payload = json!({
18 "message_type": "plugin_message",
19 "plugin_id": _plugin_id,
20 "instance_id": _instance_id,
21 "message_id": generate_message_id(),
22 "content": _content,
23 "timestamp": std::time::SystemTime::now()
24 .duration_since(std::time::UNIX_EPOCH)
25 .unwrap()
26 .as_millis()
27 });
28
29 false
31}
32
33pub trait PluginMessage {
36 fn send_message_to_frontend(
38 &self,
39 content: &str,
40 plugin_ctx: &crate::metadata::PluginInstanceContext,
41 ) -> bool;
42}
43
44impl<T: PluginHandler> PluginMessage for T {
45 fn send_message_to_frontend(
46 &self,
47 content: &str,
48 plugin_ctx: &crate::metadata::PluginInstanceContext,
49 ) -> bool {
50 let plugin_id = &plugin_ctx.metadata.id;
52 let instance_id = plugin_ctx
53 .metadata
54 .instance_id
55 .as_ref()
56 .unwrap_or(&plugin_ctx.metadata.id);
57
58 let payload = serde_json::json!({
60 "message_type": "plugin_message",
61 "plugin_id": plugin_id,
62 "instance_id": instance_id,
63 "message_id": generate_message_id(),
64 "content": content,
65 "timestamp": std::time::SystemTime::now()
66 .duration_since(std::time::UNIX_EPOCH)
67 .unwrap()
68 .as_millis()
69 })
70 .to_string();
71
72 plugin_ctx.send_to_frontend("plugin-message", &payload)
74 }
75}