Skip to main content

pyth_lazer_protocol/
exchange_enums.rs

1use {
2    serde::{Deserialize, Serialize},
3    std::fmt::Display,
4};
5
6/// Asset class for an exchange entity. Mirrors the proto `AssetClass` enum.
7#[derive(
8    Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize,
9)]
10#[serde(rename_all = "snake_case")]
11pub enum ExchangeAssetClass {
12    #[default]
13    Unspecified,
14    Equity,
15    Future,
16    Commodity,
17}
18
19impl Display for ExchangeAssetClass {
20    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21        match self {
22            Self::Unspecified => write!(f, "unspecified"),
23            Self::Equity => write!(f, "equity"),
24            Self::Future => write!(f, "future"),
25            Self::Commodity => write!(f, "commodity"),
26        }
27    }
28}
29
30/// Asset subclass for an exchange entity. Mirrors the proto `AssetSubclass` enum.
31#[derive(
32    Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize,
33)]
34#[serde(rename_all = "snake_case")]
35pub enum ExchangeAssetSubclass {
36    #[default]
37    Unspecified,
38    CommonStock,
39    Etf,
40    Energy,
41    Metals,
42    Equity,
43    FixedIncome,
44    Fx,
45    Agricultural,
46    Cocoa,
47    Coffee,
48    RawSugar,
49    PreciousMetals,
50    BaseMetals,
51    Volatility,
52}
53
54impl Display for ExchangeAssetSubclass {
55    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
56        match self {
57            Self::Unspecified => write!(f, "unspecified"),
58            Self::CommonStock => write!(f, "common_stock"),
59            Self::Etf => write!(f, "etf"),
60            Self::Energy => write!(f, "energy"),
61            Self::Metals => write!(f, "metals"),
62            Self::Equity => write!(f, "equity"),
63            Self::FixedIncome => write!(f, "fixed_income"),
64            Self::Fx => write!(f, "fx"),
65            Self::Agricultural => write!(f, "agricultural"),
66            Self::Cocoa => write!(f, "cocoa"),
67            Self::Coffee => write!(f, "coffee"),
68            Self::RawSugar => write!(f, "raw_sugar"),
69            Self::PreciousMetals => write!(f, "precious_metals"),
70            Self::BaseMetals => write!(f, "base_metals"),
71            Self::Volatility => write!(f, "volatility"),
72        }
73    }
74}
75
76/// Asset sector for an exchange entity. Mirrors the proto `AssetSector` enum.
77#[derive(
78    Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize,
79)]
80#[serde(rename_all = "snake_case")]
81pub enum ExchangeAssetSector {
82    #[default]
83    Unspecified,
84    Technology,
85    Financials,
86    BroadMarket,
87    Oil,
88    Metals,
89    Index,
90    Rates,
91    Fx,
92    /// Deprecated: use `Agriculture`. Kept for backward compatibility.
93    Agricultural,
94    Energy,
95    Materials,
96    Agriculture,
97}
98
99impl Display for ExchangeAssetSector {
100    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
101        match self {
102            Self::Unspecified => write!(f, "unspecified"),
103            Self::Technology => write!(f, "technology"),
104            Self::Financials => write!(f, "financials"),
105            Self::BroadMarket => write!(f, "broad_market"),
106            Self::Oil => write!(f, "oil"),
107            Self::Metals => write!(f, "metals"),
108            Self::Index => write!(f, "index"),
109            Self::Rates => write!(f, "rates"),
110            Self::Fx => write!(f, "fx"),
111            Self::Agricultural => write!(f, "agricultural"),
112            Self::Energy => write!(f, "energy"),
113            Self::Materials => write!(f, "materials"),
114            Self::Agriculture => write!(f, "agriculture"),
115        }
116    }
117}