Skip to main content

kellnr_webhooks/
lib.rs

1use chrono::{DateTime, Utc};
2use kellnr_common::normalized_name::NormalizedName;
3use kellnr_common::version::Version;
4use kellnr_common::webhook::WebhookEvent;
5use kellnr_db::DbProvider;
6use serde_json::json;
7
8mod client;
9pub mod endpoints;
10mod service;
11mod signature;
12mod target;
13#[cfg(test)]
14mod tests;
15pub mod types;
16
17pub use endpoints::{
18    delete_webhook, get_all_webhooks, get_webhook, register_webhook, test_webhook,
19};
20pub use service::run_webhook_service;
21
22pub async fn notify_crate(
23    event: WebhookEvent,
24    timestamp: &DateTime<Utc>,
25    normalized_name: &NormalizedName,
26    version: &Version,
27    db: &std::sync::Arc<dyn DbProvider>,
28) {
29    let payload = json!({
30        "type": event,
31        "timestamp": timestamp,
32        "data": {
33            "crate_name": format!("{}", normalized_name),
34            "crate_version": version
35        }
36    });
37
38    if let Err(err) = db.add_webhook_queue(event, payload).await {
39        tracing::error!("Db: {err:?}");
40    }
41}