cronback_lib/types/
webhook.rs1use std::time::Duration;
2
3use dto::{FromProto, IntoProto};
4use serde::{Deserialize, Serialize};
5use validator::Validate;
6
7#[derive(
8 Debug, FromProto, IntoProto, Clone, Serialize, Deserialize, PartialEq, Eq,
9)]
10#[proto(target = "proto::common::HttpMethod")]
11#[serde(rename_all = "UPPERCASE")]
12pub enum HttpMethod {
13 Delete,
14 Get,
15 Head,
16 Patch,
17 Post,
18 Put,
19}
20
21#[derive(
22 Debug,
23 FromProto,
24 IntoProto,
25 Clone,
26 Serialize,
27 Deserialize,
28 PartialEq,
29 Validate,
30 Eq,
31)]
32#[proto(target = "proto::common::Webhook")]
33pub struct Webhook {
34 pub url: String,
35 pub http_method: HttpMethod,
36 #[from_proto(map = "Duration::from_secs_f64")]
37 #[into_proto(map = "std::time::Duration::as_secs_f64", map_by_ref)]
38 pub timeout_s: std::time::Duration,
39 pub retry: Option<RetryConfig>,
41}
42
43#[derive(
44 Debug, IntoProto, FromProto, Clone, Serialize, Deserialize, PartialEq, Eq,
45)]
46#[proto(target = "proto::common::RetryConfig", oneof = "policy")]
47pub enum RetryConfig {
48 #[proto(name = "Simple")]
49 SimpleRetry(SimpleRetry),
50 #[proto(name = "ExponentialBackoff")]
51 ExponentialBackoffRetry(ExponentialBackoffRetry),
52}
53
54#[derive(
55 Debug, IntoProto, FromProto, Clone, Serialize, Deserialize, PartialEq, Eq,
56)]
57#[proto(target = "proto::common::SimpleRetry")]
58pub struct SimpleRetry {
59 pub max_num_attempts: u32,
60 #[into_proto(map = "std::time::Duration::as_secs_f64", map_by_ref)]
61 #[from_proto(map = "Duration::from_secs_f64")]
62 pub delay_s: Duration,
63}
64
65#[derive(
66 Debug, FromProto, IntoProto, Clone, Serialize, Deserialize, PartialEq, Eq,
67)]
68#[proto(target = "proto::common::ExponentialBackoffRetry")]
69pub struct ExponentialBackoffRetry {
70 pub max_num_attempts: u32,
71 #[into_proto(map = "std::time::Duration::as_secs_f64", map_by_ref)]
72 #[from_proto(map = "Duration::from_secs_f64")]
73 pub delay_s: Duration,
74 #[into_proto(map = "std::time::Duration::as_secs_f64", map_by_ref)]
75 #[from_proto(map = "Duration::from_secs_f64")]
76 pub max_delay_s: Duration,
77}