1use serde::{Deserialize, Serialize};
9use serde_json::Value;
10use std::collections::HashMap;
11
12#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
18pub struct WebhookEndpoint {
19 #[serde(default, skip_serializing_if = "Option::is_none")]
21 pub id: Option<String>,
22 #[serde(default, skip_serializing_if = "Option::is_none")]
24 pub name: Option<String>,
25 #[serde(default, skip_serializing_if = "Option::is_none")]
27 pub callback_url: Option<String>,
28 #[serde(default, skip_serializing_if = "Option::is_none")]
31 pub secret: Option<String>,
32 #[serde(default, skip_serializing_if = "Option::is_none")]
34 pub is_active: Option<bool>,
35 #[serde(default, skip_serializing_if = "Option::is_none")]
37 pub created_at: Option<String>,
38 #[serde(default, skip_serializing_if = "Option::is_none")]
40 pub updated_at: Option<String>,
41 #[serde(flatten)]
43 pub extra: HashMap<String, Value>,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
53pub struct WebhookEndpointCreateInput {
54 pub name: String,
56 pub callback_url: String,
58 #[serde(default, skip_serializing_if = "Option::is_none")]
60 pub is_active: Option<bool>,
61 #[serde(default, skip_serializing_if = "Vec::is_empty")]
63 pub event_types: Vec<String>,
64}
65
66#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
70pub struct WebhookEndpointUpdateInput {
71 #[serde(default, skip_serializing_if = "Option::is_none")]
73 pub name: Option<String>,
74 #[serde(default, skip_serializing_if = "Option::is_none")]
76 pub callback_url: Option<String>,
77 #[serde(default, skip_serializing_if = "Option::is_none")]
79 pub is_active: Option<bool>,
80 #[serde(default, skip_serializing_if = "Vec::is_empty")]
82 pub event_types: Vec<String>,
83}
84
85#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
91pub struct WebhookEventType {
92 #[serde(default, skip_serializing_if = "Option::is_none")]
94 pub event_type: Option<String>,
95 #[serde(default, skip_serializing_if = "Option::is_none")]
97 pub description: Option<String>,
98 #[serde(default, skip_serializing_if = "Option::is_none")]
100 pub schema_version: Option<i64>,
101 #[serde(flatten)]
103 pub extra: HashMap<String, Value>,
104}
105
106#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
109pub struct WebhookEventTypesResponse {
110 #[serde(default, skip_serializing_if = "Vec::is_empty")]
112 pub event_types: Vec<WebhookEventType>,
113 #[serde(flatten)]
115 pub extra: HashMap<String, Value>,
116}
117
118#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
120pub struct WebhookSampleDelivery {
121 #[serde(default, skip_serializing_if = "Option::is_none")]
123 pub timestamp: Option<String>,
124 #[serde(default, skip_serializing_if = "Vec::is_empty")]
126 pub events: Vec<Value>,
127 #[serde(flatten)]
129 pub extra: HashMap<String, Value>,
130}
131
132#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
135pub struct WebhookSamplePayloadSample {
136 #[serde(default, skip_serializing_if = "Option::is_none")]
138 pub sample_delivery: Option<WebhookSampleDelivery>,
139 #[serde(flatten)]
141 pub extra: HashMap<String, Value>,
142}
143
144#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
155pub struct WebhookSamplePayloadResponse {
156 #[serde(default, skip_serializing_if = "Option::is_none")]
158 pub event_type: Option<String>,
159 #[serde(default, skip_serializing_if = "Option::is_none")]
161 pub sample_delivery: Option<WebhookSampleDelivery>,
162 #[serde(default, skip_serializing_if = "Option::is_none")]
164 pub signature_header: Option<String>,
165 #[serde(default, skip_serializing_if = "Option::is_none")]
167 pub note: Option<String>,
168 #[serde(default, skip_serializing_if = "HashMap::is_empty")]
170 pub samples: HashMap<String, WebhookSamplePayloadSample>,
171 #[serde(default, skip_serializing_if = "Option::is_none")]
173 pub usage: Option<String>,
174 #[serde(flatten)]
176 pub extra: HashMap<String, Value>,
177}
178
179#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
182pub struct WebhookTestDeliveryResult {
183 #[serde(default, skip_serializing_if = "Option::is_none")]
185 pub success: Option<bool>,
186 #[serde(default, skip_serializing_if = "Option::is_none")]
188 pub status_code: Option<i64>,
189 #[serde(default, skip_serializing_if = "Option::is_none")]
191 pub response_time_ms: Option<i64>,
192 #[serde(default, skip_serializing_if = "Option::is_none")]
194 pub endpoint_url: Option<String>,
195 #[serde(default, skip_serializing_if = "Option::is_none")]
197 pub message: Option<String>,
198 #[serde(default, skip_serializing_if = "Option::is_none")]
200 pub error: Option<String>,
201 #[serde(default, skip_serializing_if = "Option::is_none")]
203 pub response_body: Option<String>,
204 #[serde(default, skip_serializing_if = "Option::is_none")]
206 pub test_payload: Option<Value>,
207 #[serde(flatten)]
209 pub extra: HashMap<String, Value>,
210}
211
212#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
221pub struct WebhookAlert {
222 #[serde(default, skip_serializing_if = "Option::is_none")]
224 pub alert_id: Option<String>,
225 #[serde(default, skip_serializing_if = "Option::is_none")]
227 pub name: Option<String>,
228 #[serde(default, skip_serializing_if = "Option::is_none")]
230 pub query_type: Option<String>,
231 #[serde(default, skip_serializing_if = "Option::is_none")]
233 pub filters: Option<Value>,
234 #[serde(default, skip_serializing_if = "Option::is_none")]
236 pub frequency: Option<String>,
237 #[serde(default, skip_serializing_if = "Option::is_none")]
239 pub cron_expression: Option<String>,
240 #[serde(default, skip_serializing_if = "Option::is_none")]
242 pub status: Option<String>,
243 #[serde(default, skip_serializing_if = "Option::is_none")]
245 pub created_at: Option<String>,
246 #[serde(default, skip_serializing_if = "Option::is_none")]
248 pub last_checked_at: Option<String>,
249 #[serde(default, skip_serializing_if = "Option::is_none")]
251 pub match_count: Option<i64>,
252 #[serde(flatten)]
254 pub extra: HashMap<String, Value>,
255}
256
257#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
265pub struct WebhookAlertCreateInput {
266 pub name: String,
268 pub query_type: String,
270 pub filters: Value,
272 #[serde(default, skip_serializing_if = "Option::is_none")]
274 pub frequency: Option<String>,
275 #[serde(default, skip_serializing_if = "Option::is_none")]
277 pub cron_expression: Option<String>,
278 #[serde(default, skip_serializing_if = "Option::is_none")]
280 pub endpoint: Option<String>,
281}
282
283#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
289pub struct WebhookAlertUpdateInput {
290 #[serde(default, skip_serializing_if = "Option::is_none")]
292 pub name: Option<String>,
293 #[serde(default, skip_serializing_if = "Option::is_none")]
295 pub frequency: Option<String>,
296 #[serde(default, skip_serializing_if = "Option::is_none")]
298 pub cron_expression: Option<String>,
299 #[serde(default, skip_serializing_if = "Option::is_none")]
301 pub is_active: Option<bool>,
302}