use std::time::{SystemTime, UNIX_EPOCH};
use crate::PluginHandler;
use serde_json::json;
fn generate_message_id() -> String {
let timestamp = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_nanos();
format!("message_{}", timestamp)
}
pub fn send_message_to_frontend(_plugin_id: &str, _instance_id: &str, _content: &str) -> bool {
let _payload = json!({
"message_type": "plugin_message",
"plugin_id": _plugin_id,
"instance_id": _instance_id,
"message_id": generate_message_id(),
"content": _content,
"timestamp": std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap()
.as_millis()
});
false
}
pub trait PluginMessage {
fn send_message_to_frontend(
&self,
content: &str,
plugin_ctx: &crate::metadata::PluginInstanceContext,
) -> bool;
}
impl<T: PluginHandler> PluginMessage for T {
fn send_message_to_frontend(
&self,
content: &str,
plugin_ctx: &crate::metadata::PluginInstanceContext,
) -> bool {
let plugin_id = &plugin_ctx.metadata.id;
let instance_id = plugin_ctx
.metadata
.instance_id
.as_ref()
.unwrap_or(&plugin_ctx.metadata.id);
let payload = serde_json::json!({
"message_type": "plugin_message",
"plugin_id": plugin_id,
"instance_id": instance_id,
"message_id": generate_message_id(),
"content": content,
"timestamp": std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap()
.as_millis()
})
.to_string();
plugin_ctx.send_to_frontend("plugin-message", &payload)
}
}