cronback_lib/types/
webhook.rs

1use 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    // None means no retry
40    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}