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