pub trait MessageFormatter: Send + Sync {
// Required methods
fn name(&self) -> &str;
fn format(&self, event: &Event) -> Option<FormattedMessage>;
}Expand description
Converts domain events into platform-specific messages.
Implement this trait to control how events appear on Slack, Discord, Telegram, or any other messaging platform. The formatter is decoupled from delivery: subscribers handle retries and HTTP, formatters handle presentation.
Return None from format to silently
skip events that the formatter does not care about.
§Examples
use ironflow_engine::notify::{Event, FormattedMessage, MessageFormatter};
struct PlainTextFormatter;
impl MessageFormatter for PlainTextFormatter {
fn name(&self) -> &str { "plain-text" }
fn format(&self, event: &Event) -> Option<FormattedMessage> {
let text = format!("[{}] event fired", event.event_type());
Some(FormattedMessage::text(&text))
}
}
let formatter = PlainTextFormatter;
let event = Event::RunCreated {
run_id: uuid::Uuid::now_v7(),
workflow_name: "deploy".to_string(),
at: chrono::Utc::now(),
};
let msg = formatter.format(&event).unwrap();
assert!(msg.body().contains("run_created"));Required Methods§
Sourcefn format(&self, event: &Event) -> Option<FormattedMessage>
fn format(&self, event: &Event) -> Option<FormattedMessage>
Convert an event into a platform-specific message.
Return None to skip the event silently.