Skip to main content

upstox_rust_sdk/models/
mod.rs

1pub mod charges;
2pub mod error_response;
3pub mod expired_instruments;
4pub mod gtt_orders;
5pub mod historical_data;
6pub mod instruments;
7pub mod login;
8pub mod margins;
9pub mod market_information;
10pub mod market_quote;
11pub mod option_chain;
12pub mod orders;
13pub mod portfolio;
14pub mod success_response;
15pub mod trade_profit_and_loss;
16pub mod user;
17pub mod ws;
18
19use {
20    crate::utils::serde_spaced_lowercase,
21    serde::{Deserialize, Deserializer, Serialize, Serializer},
22    std::{
23        fmt::{self, Display},
24        str::FromStr,
25    },
26};
27
28#[derive(Deserialize, Serialize, Debug)]
29pub struct ResponseSummary {
30    pub total: u32,
31    pub payload_error: Option<u32>,
32    pub success: u32,
33    pub error: u32,
34}
35
36#[derive(Deserialize, Serialize, Clone, Debug)]
37#[serde(rename_all = "UPPERCASE")]
38pub enum AssetType {
39    COM,
40    INDEX,
41    EQUITY,
42    CUR,
43    IRD,
44}
45
46#[derive(Deserialize, Serialize, Debug, Eq, Hash, Clone, PartialEq)]
47#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
48pub enum ExchangeSegment {
49    NseEq,
50    NseIndex,
51    NseFo,
52    NseCom,
53    NcdFo,
54    BseEq,
55    BseIndex,
56    BseFo,
57    BcdFo,
58    McxFo,
59}
60
61#[derive(Deserialize, Serialize, Debug, PartialEq)]
62#[serde(rename_all = "UPPERCASE")]
63pub enum ProductType {
64    I,
65    D,
66    CO,
67    MTF,
68}
69
70#[derive(Deserialize, Serialize, Debug)]
71#[serde(rename_all = "UPPERCASE")]
72pub enum TransactionType {
73    Buy,
74    Sell,
75}
76
77#[derive(Deserialize, Serialize, Debug, PartialEq)]
78#[serde(rename_all = "UPPERCASE")]
79pub enum SegmentType {
80    EQ,
81    FO,
82    COM,
83    CD,
84    MF,
85}
86
87#[derive(Deserialize, Serialize, Clone, Debug)]
88#[serde(rename_all = "UPPERCASE")]
89pub enum Exchange {
90    NSE,
91    NFO,
92    CDS,
93    BSE,
94    BFO,
95    BCD,
96    MCX,
97}
98
99impl Display for Exchange {
100    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
101        let s: &str = match self {
102            Exchange::NSE => "NSE",
103            Exchange::NFO => "NFO",
104            Exchange::CDS => "CDS",
105            Exchange::BSE => "BSE",
106            Exchange::BFO => "BFO",
107            Exchange::BCD => "BCD",
108            Exchange::MCX => "MCX",
109        };
110        write!(f, "{}", s)
111    }
112}
113
114#[derive(Deserialize, Serialize, Debug)]
115#[serde(rename_all = "UPPERCASE")]
116pub enum OrderVariety {
117    Simple,
118    AMO,
119    CO,
120    OCO,
121}
122
123#[derive(Debug)]
124pub enum OrderStatus {
125    ValidationPending,
126    ModifyPending,
127    TriggerPending,
128    PutOrderReqReceived,
129    ModifyAfterMarketOrderReqReceived,
130    CancelledAfterMarketOrder,
131    Open,
132    Complete,
133    ModifyValidationPending,
134    AfterMarketOrderReqReceived,
135    Modified,
136    NotCancelled,
137    CancelPending,
138    Rejected,
139    Cancelled,
140    OpenPending,
141    NotModified,
142}
143
144impl Display for OrderStatus {
145    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
146        let s: &str = match self {
147            OrderStatus::ValidationPending => "ValidationPending",
148            OrderStatus::ModifyPending => "ModifyPending",
149            OrderStatus::TriggerPending => "TriggerPending",
150            OrderStatus::PutOrderReqReceived => "PutOrderReqReceived",
151            OrderStatus::ModifyAfterMarketOrderReqReceived => "ModifyAfterMarketOrderReqReceived",
152            OrderStatus::CancelledAfterMarketOrder => "CancelledAfterMarketOrder",
153            OrderStatus::Open => "Open",
154            OrderStatus::Complete => "Complete",
155            OrderStatus::ModifyValidationPending => "ModifyValidationPending",
156            OrderStatus::AfterMarketOrderReqReceived => "AfterMarketOrderReqReceived",
157            OrderStatus::Modified => "Modified",
158            OrderStatus::NotCancelled => "NotCancelled",
159            OrderStatus::CancelPending => "CancelPending",
160            OrderStatus::Rejected => "Rejected",
161            OrderStatus::Cancelled => "Cancelled",
162            OrderStatus::OpenPending => "OpenPending",
163            OrderStatus::NotModified => "NotModified",
164        };
165        write!(f, "{}", s)
166    }
167}
168
169impl FromStr for OrderStatus {
170    type Err = &'static str;
171
172    fn from_str(s: &str) -> Result<Self, Self::Err> {
173        match s {
174            "validation pending" => Ok(OrderStatus::ValidationPending),
175            "modify pending" => Ok(OrderStatus::ModifyPending),
176            "trigger pending" => Ok(OrderStatus::TriggerPending),
177            "put order req received" => Ok(OrderStatus::PutOrderReqReceived),
178            "modify after market order req received" => {
179                Ok(OrderStatus::ModifyAfterMarketOrderReqReceived)
180            }
181            "cancelled after market order" => Ok(OrderStatus::CancelledAfterMarketOrder),
182            "open" => Ok(OrderStatus::Open),
183            "complete" => Ok(OrderStatus::Complete),
184            "modify validation pending" => Ok(OrderStatus::ModifyValidationPending),
185            "after market order req received" => Ok(OrderStatus::AfterMarketOrderReqReceived),
186            "modified" => Ok(OrderStatus::Modified),
187            "not cancelled" => Ok(OrderStatus::NotCancelled),
188            "cancel pending" => Ok(OrderStatus::CancelPending),
189            "rejected" => Ok(OrderStatus::Rejected),
190            "cancelled" => Ok(OrderStatus::Cancelled),
191            "open pending" => Ok(OrderStatus::OpenPending),
192            "not modified" => Ok(OrderStatus::NotModified),
193            _ => Err("Invalid order status"),
194        }
195    }
196}
197
198impl Serialize for OrderStatus {
199    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
200    where
201        S: Serializer,
202    {
203        serde_spaced_lowercase::serialize(self, serializer)
204    }
205}
206
207impl<'de> Deserialize<'de> for OrderStatus {
208    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
209    where
210        D: Deserializer<'de>,
211    {
212        serde_spaced_lowercase::deserialize(deserializer)
213    }
214}