1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
5pub struct WebhookBatchCancelled {
6 pub created_at: u64,
8
9 pub id: String,
11
12 pub data: WebhookBatchData,
14
15 #[serde(skip_serializing_if = "Option::is_none")]
17 pub object: Option<String>,
18}
19
20#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
22pub struct WebhookBatchCompleted {
23 pub created_at: u64,
25
26 pub id: String,
28
29 pub data: WebhookBatchData,
31
32 #[serde(skip_serializing_if = "Option::is_none")]
34 pub object: Option<String>,
35}
36
37#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
39pub struct WebhookBatchExpired {
40 pub created_at: u64,
42
43 pub id: String,
45
46 pub data: WebhookBatchData,
48
49 #[serde(skip_serializing_if = "Option::is_none")]
51 pub object: Option<String>,
52}
53
54#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
56pub struct WebhookBatchFailed {
57 pub created_at: u64,
59
60 pub id: String,
62
63 pub data: WebhookBatchData,
65
66 #[serde(skip_serializing_if = "Option::is_none")]
68 pub object: Option<String>,
69}
70
71#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
73pub struct WebhookBatchData {
74 pub id: String,
76}
77
78#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
80pub struct WebhookEvalRunCanceled {
81 pub created_at: u64,
83
84 pub id: String,
86
87 pub data: WebhookEvalRunData,
89
90 #[serde(skip_serializing_if = "Option::is_none")]
92 pub object: Option<String>,
93}
94
95#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
97pub struct WebhookEvalRunFailed {
98 pub created_at: u64,
100
101 pub id: String,
103
104 pub data: WebhookEvalRunData,
106
107 #[serde(skip_serializing_if = "Option::is_none")]
109 pub object: Option<String>,
110}
111
112#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
114pub struct WebhookEvalRunSucceeded {
115 pub created_at: u64,
117
118 pub id: String,
120
121 pub data: WebhookEvalRunData,
123
124 #[serde(skip_serializing_if = "Option::is_none")]
126 pub object: Option<String>,
127}
128
129#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
131pub struct WebhookEvalRunData {
132 pub id: String,
134}
135
136#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
138pub struct WebhookFineTuningJobCancelled {
139 pub created_at: u64,
141
142 pub id: String,
144
145 pub data: WebhookFineTuningJobData,
147
148 #[serde(skip_serializing_if = "Option::is_none")]
150 pub object: Option<String>,
151}
152
153#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
155pub struct WebhookFineTuningJobFailed {
156 pub created_at: u64,
158
159 pub id: String,
161
162 pub data: WebhookFineTuningJobData,
164
165 #[serde(skip_serializing_if = "Option::is_none")]
167 pub object: Option<String>,
168}
169
170#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
172pub struct WebhookFineTuningJobSucceeded {
173 pub created_at: u64,
175
176 pub id: String,
178
179 pub data: WebhookFineTuningJobData,
181
182 #[serde(skip_serializing_if = "Option::is_none")]
184 pub object: Option<String>,
185}
186
187#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
189pub struct WebhookFineTuningJobData {
190 pub id: String,
192}
193
194#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
198pub struct WebhookRealtimeCallIncoming {
199 pub created_at: u64,
201
202 pub id: String,
204
205 pub data: WebhookRealtimeCallData,
207
208 #[serde(skip_serializing_if = "Option::is_none")]
210 pub object: Option<String>,
211}
212
213#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
215pub struct WebhookRealtimeCallData {
216 pub call_id: String,
218
219 pub sip_headers: Vec<SipHeader>,
221}
222
223#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
225pub struct SipHeader {
226 pub name: String,
228
229 pub value: String,
231}
232
233#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
235pub struct WebhookResponseCancelled {
236 pub created_at: u64,
238
239 pub id: String,
241
242 pub data: WebhookResponseData,
244
245 #[serde(skip_serializing_if = "Option::is_none")]
247 pub object: Option<String>,
248}
249
250#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
252pub struct WebhookResponseCompleted {
253 pub created_at: u64,
255
256 pub id: String,
258
259 pub data: WebhookResponseData,
261
262 #[serde(skip_serializing_if = "Option::is_none")]
264 pub object: Option<String>,
265}
266
267#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
269pub struct WebhookResponseFailed {
270 pub created_at: u64,
272
273 pub id: String,
275
276 pub data: WebhookResponseData,
278
279 #[serde(skip_serializing_if = "Option::is_none")]
281 pub object: Option<String>,
282}
283
284#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
286pub struct WebhookResponseIncomplete {
287 pub created_at: u64,
289
290 pub id: String,
292
293 pub data: WebhookResponseData,
295
296 #[serde(skip_serializing_if = "Option::is_none")]
298 pub object: Option<String>,
299}
300
301#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
303pub struct WebhookResponseData {
304 pub id: String,
306}
307
308#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
311#[serde(tag = "type")]
312pub enum WebhookEvent {
313 #[serde(rename = "batch.cancelled")]
314 BatchCancelled(WebhookBatchCancelled),
315
316 #[serde(rename = "batch.completed")]
317 BatchCompleted(WebhookBatchCompleted),
318
319 #[serde(rename = "batch.expired")]
320 BatchExpired(WebhookBatchExpired),
321
322 #[serde(rename = "batch.failed")]
323 BatchFailed(WebhookBatchFailed),
324
325 #[serde(rename = "eval.run.canceled")]
326 EvalRunCanceled(WebhookEvalRunCanceled),
327
328 #[serde(rename = "eval.run.failed")]
329 EvalRunFailed(WebhookEvalRunFailed),
330
331 #[serde(rename = "eval.run.succeeded")]
332 EvalRunSucceeded(WebhookEvalRunSucceeded),
333
334 #[serde(rename = "fine_tuning.job.cancelled")]
335 FineTuningJobCancelled(WebhookFineTuningJobCancelled),
336
337 #[serde(rename = "fine_tuning.job.failed")]
338 FineTuningJobFailed(WebhookFineTuningJobFailed),
339
340 #[serde(rename = "fine_tuning.job.succeeded")]
341 FineTuningJobSucceeded(WebhookFineTuningJobSucceeded),
342
343 #[serde(rename = "realtime.call.incoming")]
344 RealtimeCallIncoming(WebhookRealtimeCallIncoming),
345
346 #[serde(rename = "response.cancelled")]
347 ResponseCancelled(WebhookResponseCancelled),
348
349 #[serde(rename = "response.completed")]
350 ResponseCompleted(WebhookResponseCompleted),
351
352 #[serde(rename = "response.failed")]
353 ResponseFailed(WebhookResponseFailed),
354
355 #[serde(rename = "response.incomplete")]
356 ResponseIncomplete(WebhookResponseIncomplete),
357}
358
359#[cfg(feature = "_api")]
361macro_rules! impl_event_type {
362 ($($ty:ty => $event_type:expr),* $(,)?) => {
363 $(
364 impl crate::traits::EventType for $ty {
365 fn event_type(&self) -> &'static str {
366 $event_type
367 }
368 }
369 )*
370 };
371}
372
373#[cfg(feature = "_api")]
374macro_rules! impl_event_id {
375 ($($ty:ty),* $(,)?) => {
376 $(
377 impl crate::traits::EventId for $ty {
378 fn event_id(&self) -> &str {
379 &self.id
380 }
381 }
382 )*
383 };
384}
385#[cfg(feature = "_api")]
387impl_event_type! {
388 WebhookBatchCancelled => "batch.cancelled",
389 WebhookBatchCompleted => "batch.completed",
390 WebhookBatchExpired => "batch.expired",
391 WebhookBatchFailed => "batch.failed",
392 WebhookEvalRunCanceled => "eval.run.canceled",
393 WebhookEvalRunFailed => "eval.run.failed",
394 WebhookEvalRunSucceeded => "eval.run.succeeded",
395 WebhookFineTuningJobCancelled => "fine_tuning.job.cancelled",
396 WebhookFineTuningJobFailed => "fine_tuning.job.failed",
397 WebhookFineTuningJobSucceeded => "fine_tuning.job.succeeded",
398 WebhookRealtimeCallIncoming => "realtime.call.incoming",
399 WebhookResponseCancelled => "response.cancelled",
400 WebhookResponseCompleted => "response.completed",
401 WebhookResponseFailed => "response.failed",
402 WebhookResponseIncomplete => "response.incomplete",
403}
404
405#[cfg(feature = "_api")]
407impl_event_id! {
408 WebhookBatchCancelled,
409 WebhookBatchCompleted,
410 WebhookBatchExpired,
411 WebhookBatchFailed,
412 WebhookEvalRunCanceled,
413 WebhookEvalRunFailed,
414 WebhookEvalRunSucceeded,
415 WebhookFineTuningJobCancelled,
416 WebhookFineTuningJobFailed,
417 WebhookFineTuningJobSucceeded,
418 WebhookRealtimeCallIncoming,
419 WebhookResponseCancelled,
420 WebhookResponseCompleted,
421 WebhookResponseFailed,
422 WebhookResponseIncomplete,
423}
424
425#[cfg(feature = "_api")]
427impl crate::traits::EventType for WebhookEvent {
428 fn event_type(&self) -> &'static str {
429 match self {
430 WebhookEvent::BatchCancelled(e) => e.event_type(),
431 WebhookEvent::BatchCompleted(e) => e.event_type(),
432 WebhookEvent::BatchExpired(e) => e.event_type(),
433 WebhookEvent::BatchFailed(e) => e.event_type(),
434 WebhookEvent::EvalRunCanceled(e) => e.event_type(),
435 WebhookEvent::EvalRunFailed(e) => e.event_type(),
436 WebhookEvent::EvalRunSucceeded(e) => e.event_type(),
437 WebhookEvent::FineTuningJobCancelled(e) => e.event_type(),
438 WebhookEvent::FineTuningJobFailed(e) => e.event_type(),
439 WebhookEvent::FineTuningJobSucceeded(e) => e.event_type(),
440 WebhookEvent::RealtimeCallIncoming(e) => e.event_type(),
441 WebhookEvent::ResponseCancelled(e) => e.event_type(),
442 WebhookEvent::ResponseCompleted(e) => e.event_type(),
443 WebhookEvent::ResponseFailed(e) => e.event_type(),
444 WebhookEvent::ResponseIncomplete(e) => e.event_type(),
445 }
446 }
447}
448
449#[cfg(feature = "_api")]
450impl crate::traits::EventId for WebhookEvent {
451 fn event_id(&self) -> &str {
452 match self {
453 WebhookEvent::BatchCancelled(e) => e.event_id(),
454 WebhookEvent::BatchCompleted(e) => e.event_id(),
455 WebhookEvent::BatchExpired(e) => e.event_id(),
456 WebhookEvent::BatchFailed(e) => e.event_id(),
457 WebhookEvent::EvalRunCanceled(e) => e.event_id(),
458 WebhookEvent::EvalRunFailed(e) => e.event_id(),
459 WebhookEvent::EvalRunSucceeded(e) => e.event_id(),
460 WebhookEvent::FineTuningJobCancelled(e) => e.event_id(),
461 WebhookEvent::FineTuningJobFailed(e) => e.event_id(),
462 WebhookEvent::FineTuningJobSucceeded(e) => e.event_id(),
463 WebhookEvent::RealtimeCallIncoming(e) => e.event_id(),
464 WebhookEvent::ResponseCancelled(e) => e.event_id(),
465 WebhookEvent::ResponseCompleted(e) => e.event_id(),
466 WebhookEvent::ResponseFailed(e) => e.event_id(),
467 WebhookEvent::ResponseIncomplete(e) => e.event_id(),
468 }
469 }
470}
471
472impl WebhookEvent {
473 pub fn created_at(&self) -> u64 {
475 match self {
476 WebhookEvent::BatchCancelled(w) => w.created_at,
477 WebhookEvent::BatchCompleted(w) => w.created_at,
478 WebhookEvent::BatchExpired(w) => w.created_at,
479 WebhookEvent::BatchFailed(w) => w.created_at,
480 WebhookEvent::EvalRunCanceled(w) => w.created_at,
481 WebhookEvent::EvalRunFailed(w) => w.created_at,
482 WebhookEvent::EvalRunSucceeded(w) => w.created_at,
483 WebhookEvent::FineTuningJobCancelled(w) => w.created_at,
484 WebhookEvent::FineTuningJobFailed(w) => w.created_at,
485 WebhookEvent::FineTuningJobSucceeded(w) => w.created_at,
486 WebhookEvent::RealtimeCallIncoming(w) => w.created_at,
487 WebhookEvent::ResponseCancelled(w) => w.created_at,
488 WebhookEvent::ResponseCompleted(w) => w.created_at,
489 WebhookEvent::ResponseFailed(w) => w.created_at,
490 WebhookEvent::ResponseIncomplete(w) => w.created_at,
491 }
492 }
493}