diff --git a/crates/service/storyteller_web/src/complex_models/event_match_predicate.rs b/crates/service/storyteller_web/src/complex_models/event_match_predicate.rs new file mode 100644 index 0000000000..e69de29bb2 diff --git a/crates/service/storyteller_web/src/complex_models/mod.rs b/crates/service/storyteller_web/src/complex_models/mod.rs new file mode 100644 index 0000000000..1a4969ac4f --- /dev/null +++ b/crates/service/storyteller_web/src/complex_models/mod.rs @@ -0,0 +1,34 @@ +pub mod event_match_predicate; + +#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)] +#[serde(rename_all = "snake_case")] +pub enum EventMatchPredicate { + BitsCheermoteNameExactMatch { + cheermote_name: String, + }, + BitsSpendThreshold { + minimum_bits_spent: u32, + }, + ChannelPointsRewardNameExactMatch { + reward_name: String, + }, +} + +#[cfg(test)] +mod tests { + use crate::complex_models::EventMatchPredicate; + + #[test] + fn bits_cheermote_name_exact_match() { + let rust_value = EventMatchPredicate::BitsCheermoteNameExactMatch { + cheermote_name: "Cheer1".to_string() + }; + let json = "{\"bits_cheermote_name_exact_match\":{\"cheermote_name\":\"Cheer1\"}}"; + + let converted_to_json= serde_json::to_string(&rust_value).unwrap(); + assert_eq!(&converted_to_json, json); + + let converted_from_json : EventMatchPredicate = serde_json::from_str(json).unwrap(); + assert_eq!(&converted_from_json, &rust_value); + } +} \ No newline at end of file diff --git a/crates/service/storyteller_web/src/main.rs b/crates/service/storyteller_web/src/main.rs index 8df94e82ab..784eb37593 100644 --- a/crates/service/storyteller_web/src/main.rs +++ b/crates/service/storyteller_web/src/main.rs @@ -16,6 +16,7 @@ pub const RESERVED_USERNAMES : &'static str = include_str!("../../../../db/reser pub const RESERVED_SUBSTRINGS : &'static str = include_str!("../../../../db/reserved_usernames_including.txt"); pub mod common_env; +pub mod complex_models; pub mod http_clients; pub mod http_server; pub mod routes;