pyth_lazer_protocol/
symbol_state.rs1use {
2 serde::{Deserialize, Serialize},
3 std::fmt::Display,
4};
5
6#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
8#[serde(rename_all = "snake_case")]
9pub enum SymbolState {
10 ComingSoon,
11 Stable,
12 Inactive,
13 Beta,
14 Expired,
15 #[serde(other)]
18 Unknown,
19}
20
21impl Display for SymbolState {
22 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
23 match self {
24 SymbolState::ComingSoon => write!(f, "coming_soon"),
25 SymbolState::Stable => write!(f, "stable"),
26 SymbolState::Inactive => write!(f, "inactive"),
27 SymbolState::Beta => write!(f, "beta"),
28 SymbolState::Expired => write!(f, "expired"),
29 SymbolState::Unknown => write!(f, "unknown"),
30 }
31 }
32}
33
34#[cfg(test)]
35mod tests {
36 use super::*;
37
38 #[test]
39 fn known_states_roundtrip() {
40 for (state, wire) in [
41 (SymbolState::ComingSoon, "\"coming_soon\""),
42 (SymbolState::Stable, "\"stable\""),
43 (SymbolState::Inactive, "\"inactive\""),
44 (SymbolState::Beta, "\"beta\""),
45 (SymbolState::Expired, "\"expired\""),
46 (SymbolState::Unknown, "\"unknown\""),
47 ] {
48 assert_eq!(serde_json::to_string(&state).unwrap(), wire);
49 assert_eq!(
50 serde_json::from_str::<SymbolState>(wire).unwrap(),
51 state,
52 "{wire} should deserialize"
53 );
54 }
55 }
56
57 #[test]
58 fn unrecognized_state_deserializes_to_unknown() {
59 assert_eq!(
60 serde_json::from_str::<SymbolState>("\"some_future_state\"").unwrap(),
61 SymbolState::Unknown,
62 );
63 }
64}