pub mod discord;
pub mod generic;
pub mod slack;
pub mod telegram;
pub use discord::DiscordPayloadBuilder;
pub use generic::GenericWebhookPayloadBuilder;
pub use slack::SlackPayloadBuilder;
pub use telegram::TelegramPayloadBuilder;
pub trait WebhookPayloadBuilder: Send + Sync {
fn build_payload(&self, title: &str, body: &str) -> serde_json::Value;
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_bold_titles_on_all_platforms() {
let tg = TelegramPayloadBuilder {
chat_id: "123".into(),
disable_web_preview: true,
};
let payload = tg.build_payload("**Bold Title**", "Body");
assert!(payload["text"].as_str().unwrap().contains("**Bold Title**"));
let slack = SlackPayloadBuilder;
let payload = slack.build_payload("*Bold Title*", "Body");
assert!(
payload["blocks"][0]["text"]["text"]
.as_str()
.unwrap()
.contains("*Bold Title*\n\nBody")
);
let discord = DiscordPayloadBuilder;
let payload = discord.build_payload("**Bold Title**", "Body");
assert!(
payload["content"]
.as_str()
.unwrap()
.contains("**Bold Title**\n\nBody")
);
}
}