kiteticker_async_manager/models/
exchange.rs

1use serde_repr::{Deserialize_repr, Serialize_repr};
2
3#[derive(
4  Debug, Clone, Copy, Default, PartialEq, Serialize_repr, Deserialize_repr,
5)]
6#[repr(u8)]
7///
8/// Exchange options
9///
10pub 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}