use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::workflows::traveler::state::DeclineReason;
pub mod operations {
pub const CREATE_DRAFT: &str = "traveler.create_draft";
pub const SET_NAME: &str = "traveler.set_full_name";
pub const CHANGE_EMAIL: &str = "traveler.change_email";
pub const SET_LOYALTY_NUMBER: &str = "traveler.set_loyalty_number";
pub const DECLINE_LOYALTY_NUMBER: &str = "traveler.decline_loyalty_number";
pub const ACTIVATE: &str = "traveler.activate";
pub const ARCHIVE: &str = "traveler.archive";
pub const DELETE: &str = "traveler.delete";
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum TravelerCommand {
CreateDraft,
CreateNamedDraft {
full_name: String,
},
SetName {
value: String,
},
ChangeEmail {
value: String,
},
SetLoyaltyNumber {
value: String,
},
DeclineLoyaltyNumber {
reason: DeclineReason,
},
Activate,
Archive,
Delete,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum TravelerEvent {
DraftCreated,
NameSet {
value: String,
},
EmailChanged {
#[serde(default, skip_serializing_if = "Option::is_none")]
previous: Option<String>,
value: String,
},
LoyaltyNumberSet {
value: String,
},
LoyaltyNumberDeclined {
reason: DeclineReason,
},
Activated,
Archived,
Deleted,
}
impl TravelerEvent {
#[must_use]
pub fn event_type(&self) -> &'static str {
match self {
Self::DraftCreated => "traveler.draft_created",
Self::NameSet { .. } => "traveler.full_name_set",
Self::EmailChanged { .. } => "traveler.email_changed",
Self::LoyaltyNumberSet { .. } => "traveler.loyalty_number_set",
Self::LoyaltyNumberDeclined { .. } => "traveler.loyalty_number_declined",
Self::Activated => "traveler.activated",
Self::Archived => "traveler.archived",
Self::Deleted => "traveler.deleted",
}
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct CreateDraftArgs {
#[serde(default)]
pub full_name: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct ValueArgs {
pub value: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct DeclineArgs {
pub reason: DeclineReason,
}