1use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5use url::Url;
6
7use crate::task::TaskEvent;
8
9#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
14#[serde(rename_all = "camelCase")]
15pub struct PushNotificationConfig {
16 pub id: String,
18
19 pub task_id: String,
21
22 pub url: Url,
24
25 #[serde(skip_serializing_if = "Option::is_none")]
27 pub authentication: Option<PushNotificationAuth>,
28
29 #[serde(default, skip_serializing_if = "Vec::is_empty")]
31 pub events: Vec<String>,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
36#[serde(rename_all = "camelCase", tag = "type")]
37pub enum PushNotificationAuth {
38 Bearer { token: String },
40
41 Header { name: String, value: String },
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize)]
47#[serde(rename_all = "camelCase")]
48pub struct PushNotificationEvent {
49 pub config_id: String,
51
52 pub event: TaskEvent,
54
55 pub timestamp: String,
57}