turnframe_test/workflows/traveler/
command.rs1use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5
6use crate::workflows::traveler::state::DeclineReason;
7
8pub mod operations {
10 pub const CREATE_DRAFT: &str = "traveler.create_draft";
12 pub const SET_NAME: &str = "traveler.set_full_name";
14 pub const CHANGE_EMAIL: &str = "traveler.change_email";
16 pub const SET_LOYALTY_NUMBER: &str = "traveler.set_loyalty_number";
18 pub const DECLINE_LOYALTY_NUMBER: &str = "traveler.decline_loyalty_number";
20 pub const ACTIVATE: &str = "traveler.activate";
22 pub const ARCHIVE: &str = "traveler.archive";
24 pub const DELETE: &str = "traveler.delete";
26}
27
28#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
30#[serde(rename_all = "snake_case")]
31#[non_exhaustive]
32pub enum TravelerCommand {
33 CreateDraft,
35 CreateNamedDraft {
37 full_name: String,
39 },
40 SetName {
42 value: String,
44 },
45 ChangeEmail {
47 value: String,
49 },
50 SetLoyaltyNumber {
52 value: String,
54 },
55 DeclineLoyaltyNumber {
58 reason: DeclineReason,
60 },
61 Activate,
63 Archive,
65 Delete,
67}
68
69#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
71#[serde(rename_all = "snake_case")]
72#[non_exhaustive]
73pub enum TravelerEvent {
74 DraftCreated,
76 NameSet {
78 value: String,
80 },
81 EmailChanged {
83 #[serde(default, skip_serializing_if = "Option::is_none")]
85 previous: Option<String>,
86 value: String,
88 },
89 LoyaltyNumberSet {
91 value: String,
93 },
94 LoyaltyNumberDeclined {
96 reason: DeclineReason,
98 },
99 Activated,
101 Archived,
103 Deleted,
105}
106
107impl TravelerEvent {
108 #[must_use]
110 pub fn event_type(&self) -> &'static str {
111 match self {
112 Self::DraftCreated => "traveler.draft_created",
113 Self::NameSet { .. } => "traveler.full_name_set",
114 Self::EmailChanged { .. } => "traveler.email_changed",
115 Self::LoyaltyNumberSet { .. } => "traveler.loyalty_number_set",
116 Self::LoyaltyNumberDeclined { .. } => "traveler.loyalty_number_declined",
117 Self::Activated => "traveler.activated",
118 Self::Archived => "traveler.archived",
119 Self::Deleted => "traveler.deleted",
120 }
121 }
122}
123
124#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
126#[serde(deny_unknown_fields)]
127pub struct CreateDraftArgs {
128 #[serde(default)]
130 pub full_name: Option<String>,
131}
132
133#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
135#[serde(deny_unknown_fields)]
136pub struct ValueArgs {
137 pub value: String,
139}
140
141#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
147#[serde(deny_unknown_fields)]
148pub struct DeclineArgs {
149 pub reason: DeclineReason,
151}