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}