kiteticker_async_manager/models/
exchange.rs1use serde_repr::{Deserialize_repr, Serialize_repr};
2
3#[derive(Debug, Clone, Copy, Default, PartialEq, Serialize_repr, Deserialize_repr)]
4#[repr(u8)]
5pub enum Exchange {
9 #[default]
10 NSE = 1,
11 NFO = 2,
12 CDS = 3,
13 BSE = 4,
14 BFO = 5,
15 BCD = 6,
16 MCX = 7,
17 MCXSX = 8,
18 INDICES = 9,
19}
20
21impl Exchange {
22 pub(crate) fn divisor(&self) -> f64 {
23 match self {
24 Self::CDS => 100_000_0.0,
25 Self::BCD => 100_0.0,
26 _ => 100.0,
27 }
28 }
29
30 pub(crate) fn is_tradable(&self) -> bool {
31 match self {
32 Self::INDICES => false,
33 _ => true,
34 }
35 }
36}
37
38impl From<usize> for Exchange {
39 fn from(value: usize) -> Self {
40 match value {
41 9 => Self::INDICES,
42 8 => Self::MCXSX,
43 7 => Self::MCX,
44 6 => Self::BCD,
45 5 => Self::BFO,
46 4 => Self::BSE,
47 3 => Self::CDS,
48 2 => Self::NFO,
49 1 => Self::NSE,
50 _ => Self::NSE,
51 }
52 }
53}
54
55impl From<String> for Exchange {
56 fn from(value: String) -> Self {
57 match value.as_str() {
58 "NSE" => Self::NSE,
59 "NFO" => Self::NFO,
60 "CDS" => Self::CDS,
61 "BSE" => Self::BSE,
62 "BFO" => Self::BFO,
63 "BCD" => Self::BCD,
64 "MCX" => Self::MCX,
65 "MCXSX" => Self::MCXSX,
66 "INDICES" => Self::INDICES,
67 _ => Self::NSE,
68
69 }
70 }
71}
72
73impl From<Exchange> for String {
74 fn from(value: Exchange) -> Self {
75 match value {
76 Exchange::NSE => "NSE".to_string(),
77 Exchange::NFO => "NFO".to_string(),
78 Exchange::CDS => "CDS".to_string(),
79 Exchange::BSE => "BSE".to_string(),
80 Exchange::BFO => "BFO".to_string(),
81 Exchange::BCD => "BCD".to_string(),
82 Exchange::MCX => "MCX".to_string(),
83 Exchange::MCXSX => "MCXSX".to_string(),
84 Exchange::INDICES => "INDICES".to_string(),
85 }
86 }
87}