greentic-redbutton 0.4.2

Cross-platform Greentic red-button CLI scaffold with embedded i18n and release automation
use anyhow::{Context, Result, bail};
use reqwest::blocking::Client;
use reqwest::header::CONTENT_TYPE;
use std::time::Duration;
use url::Url;

use crate::event::WebhookEvent;

pub fn send_webhook(url: &Url, payload: &WebhookEvent, timeout_ms: u64) -> Result<()> {
    let client = Client::builder()
        .timeout(Duration::from_millis(timeout_ms))
        .build()
        .context("failed to build HTTP client")?;

    let response = client
        .post(url.clone())
        .header(CONTENT_TYPE, "application/json")
        .json(payload)
        .send()
        .with_context(|| format!("failed to POST webhook to {url}"))?;

    if !response.status().is_success() {
        bail!("webhook returned HTTP {}", response.status());
    }

    Ok(())
}