myc_core/domain/dtos/webhook/
trigger.rs

1use serde::{Deserialize, Serialize};
2use std::fmt::{self, Display, Formatter};
3use std::str::FromStr;
4use utoipa::ToSchema;
5
6#[derive(
7    Clone, Debug, Serialize, Deserialize, ToSchema, PartialEq, Eq, Hash,
8)]
9pub enum WebHookTrigger {
10    // ? -----------------------------------------------------------------------
11    // ? Subscription account related actions
12    // ? -----------------------------------------------------------------------
13    #[serde(rename = "subscriptionAccount.created")]
14    SubscriptionAccountCreated,
15    #[serde(rename = "subscriptionAccount.updated")]
16    SubscriptionAccountUpdated,
17    #[serde(rename = "subscriptionAccount.deleted")]
18    SubscriptionAccountDeleted,
19
20    // ? -----------------------------------------------------------------------
21    // ? Default user account related actions
22    // ? -----------------------------------------------------------------------
23    #[serde(rename = "userAccount.created")]
24    UserAccountCreated,
25    #[serde(rename = "userAccount.updated")]
26    UserAccountUpdated,
27    #[serde(rename = "userAccount.deleted")]
28    UserAccountDeleted,
29}
30
31impl Display for WebHookTrigger {
32    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
33        match self {
34            Self::SubscriptionAccountCreated => {
35                write!(f, "subscriptionAccount.created")
36            }
37            Self::SubscriptionAccountUpdated => {
38                write!(f, "subscriptionAccount.updated")
39            }
40            Self::SubscriptionAccountDeleted => {
41                write!(f, "subscriptionAccount.deleted")
42            }
43            Self::UserAccountCreated => write!(f, "userAccount.created"),
44            Self::UserAccountUpdated => write!(f, "userAccount.updated"),
45            Self::UserAccountDeleted => write!(f, "userAccount.deleted"),
46        }
47    }
48}
49
50impl FromStr for WebHookTrigger {
51    type Err = String;
52
53    fn from_str(s: &str) -> Result<Self, Self::Err> {
54        match s {
55            "subscriptionAccount.created" => {
56                Ok(Self::SubscriptionAccountCreated)
57            }
58            "subscriptionAccount.updated" => {
59                Ok(Self::SubscriptionAccountUpdated)
60            }
61            "subscriptionAccount.deleted" => {
62                Ok(Self::SubscriptionAccountDeleted)
63            }
64            "userAccount.created" => Ok(Self::UserAccountCreated),
65            "userAccount.updated" => Ok(Self::UserAccountUpdated),
66            "userAccount.deleted" => Ok(Self::UserAccountDeleted),
67            _ => Err(format!("Unknown webhook trigger: {}", s)),
68        }
69    }
70}