Skip to main content

MessageFormatter

Trait MessageFormatter 

Source
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§

Source

fn name(&self) -> &str

A short identifier for this formatter (used in logs).

Source

fn format(&self, event: &Event) -> Option<FormattedMessage>

Convert an event into a platform-specific message.

Return None to skip the event silently.

Implementors§