Skip to main content

dfx_base/
fix_values.rs

1#![allow(non_snake_case)]
2
3use std::fmt::Display;
4
5use crate::field_map::Tag;
6
7pub struct BeginString {}
8impl BeginString {
9    pub const FIXT11: &'static str = "FIXT.1.1";
10    pub const FIX50SP2: &'static str = "FIX.5.0SP2";
11    pub const FIX50SP1: &'static str = "FIX.5.0SP1";
12    pub const FIX50: &'static str = "FIX.5.0";
13    pub const FIX44: &'static str = "FIX.4.4";
14    pub const FIX43: &'static str = "FIX.4.3";
15    pub const FIX42: &'static str = "FIX.4.2";
16    pub const FIX41: &'static str = "FIX.4.1";
17    pub const FIX40: &'static str = "FIX.4.0";
18}
19
20pub enum ApplVerID {
21    FIX27,
22    FIX30,
23    FIX40,
24    FIX41,
25    FIX42,
26    FIX43,
27    FIX44,
28    FIX50,
29    FIX50SP1,
30    FIX50SP2,
31}
32
33impl Display for ApplVerID {
34    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
35        let c = match self {
36            ApplVerID::FIX27 => "0",
37            ApplVerID::FIX30 => "1",
38            ApplVerID::FIX40 => "2",
39            ApplVerID::FIX41 => "3",
40            ApplVerID::FIX42 => "4",
41            ApplVerID::FIX43 => "5",
42            ApplVerID::FIX44 => "6",
43            ApplVerID::FIX50 => "7",
44            ApplVerID::FIX50SP1 => "8",
45            ApplVerID::FIX50SP2 => "9",
46        };
47        f.write_str(c)
48    }
49}
50
51impl ApplVerID {
52    pub fn from_begin_string(begin_string: &str) -> &str {
53        if BeginString::FIX40 == begin_string {
54            return ApplVerID::FIX40.as_str();
55        } else if BeginString::FIX41 == begin_string {
56            return ApplVerID::FIX41.as_str();
57        } else if BeginString::FIX42 == begin_string {
58            return ApplVerID::FIX42.as_str();
59        }
60        else if BeginString::FIX43 == begin_string {
61            return ApplVerID::FIX43.as_str();
62        }
63        else if BeginString::FIX44 == begin_string {
64            return ApplVerID::FIX44.as_str();
65        }
66        else if BeginString::FIX50 == begin_string {
67            return ApplVerID::FIX50.as_str();
68        }
69        else if BeginString::FIX50SP1 == begin_string {
70            return ApplVerID::FIX50SP1.as_str();
71        }
72        else if BeginString::FIX50SP2 == begin_string {
73            return ApplVerID::FIX50SP2.as_str();
74        }
75        else {
76            return begin_string;
77        }
78    }
79
80    pub fn as_str(&self) -> &str {
81        match self {
82            ApplVerID::FIX27 => "0",
83            ApplVerID::FIX30 => "1",
84            ApplVerID::FIX40 => "2",
85            ApplVerID::FIX41 => "3",
86            ApplVerID::FIX42 => "4",
87            ApplVerID::FIX43 => "5",
88            ApplVerID::FIX44 => "6",
89            ApplVerID::FIX50 => "7",
90            ApplVerID::FIX50SP1 => "8",
91            ApplVerID::FIX50SP2 => "9",
92        }
93    }
94}
95
96#[derive(Clone, Debug, PartialEq, Eq)]
97pub struct SessionRejectReason {
98    tag: Tag,
99    reason: String,
100}
101
102impl SessionRejectReason {
103    pub fn INVALID_TAG_NUMBER() -> SessionRejectReason { SessionRejectReason { tag: 0, reason: "Invalid tag number".to_string() } }
104    pub fn REQUIRED_TAG_MISSING() -> SessionRejectReason { SessionRejectReason { tag: 1, reason: "Required tag missing".to_string() } }
105    pub fn TAG_NOT_DEFINED_FOR_THIS_MESSAGE_TYPE() -> SessionRejectReason { SessionRejectReason { tag: 2, reason: "Tag not defined for this message type".to_string() } }
106    pub fn UNDEFINED_TAG() -> SessionRejectReason { SessionRejectReason { tag: 3, reason: "Undefined Tag".to_string() } }
107    pub fn TAG_SPECIFIED_WITHOUT_A_VALUE() -> SessionRejectReason { SessionRejectReason { tag: 4, reason: "Tag specified without a value".to_string() } }
108    pub fn VALUE_IS_INCORRECT() -> SessionRejectReason { SessionRejectReason { tag: 5, reason: "Value is incorrect (out of range) for this tag".to_string() } }
109    pub fn INCORRECT_DATA_FORMAT_FOR_VALUE() -> SessionRejectReason { SessionRejectReason { tag: 6, reason: "Incorrect data format for value".to_string() } }
110    pub fn DECRYPTION_PROBLEM() -> SessionRejectReason { SessionRejectReason { tag: 7, reason: "Decryption problem".to_string() } }
111    pub fn SIGNATURE_PROBLEM() -> SessionRejectReason { SessionRejectReason { tag: 8, reason: "Signature problem".to_string() } }
112    pub fn COMPID_PROBLEM() -> SessionRejectReason { SessionRejectReason { tag: 9, reason: "CompID problem".to_string() } }
113    pub fn SENDING_TIME_ACCURACY_PROBLEM() -> SessionRejectReason { SessionRejectReason { tag: 10, reason: "SendingTime accuracy problem".to_string() } }
114    pub fn INVALID_MSGTYPE() -> SessionRejectReason { SessionRejectReason { tag: 11, reason: "Invalid MsgType".to_string() } }
115    pub fn XML_VALIDATION_ERROR() -> SessionRejectReason { SessionRejectReason { tag: 12, reason: "XML validation error".to_string() } }
116    pub fn TAG_APPEARS_MORE_THAN_ONCE() -> SessionRejectReason { SessionRejectReason { tag: 13, reason: "Tag appears more than once".to_string() } }
117    pub fn TAG_SPECIFIED_OUT_OF_REQUIRED_ORDER() -> SessionRejectReason { SessionRejectReason { tag: 14, reason: "Tag specified out of required order".to_string() } }
118    pub fn REPEATING_GROUP_FIELDS_OUT_OF_ORDER() -> SessionRejectReason { SessionRejectReason { tag: 15, reason: "Repeating group fields out of order".to_string() } }
119    pub fn INCORRECT_NUM_IN_GROUP_COUNT_FOR_REPEATING_GROUP() -> SessionRejectReason { SessionRejectReason { tag: 16, reason: "Incorrect NumInGroup count for repeating group".to_string() } }
120    pub fn NON_DATA_VALUE_INCLUDES_FIELD_DELIMITER() -> SessionRejectReason { SessionRejectReason { tag: 17, reason: "Non-data value includes field delimiter".to_string() } }
121    pub fn OTHER(reason: String) -> SessionRejectReason { SessionRejectReason { tag: 99, reason } }
122
123    pub fn tag(&self) -> Tag {
124        self.tag
125    }
126
127    pub fn reason(&self) -> &str {
128        self.reason.as_ref()
129    }
130
131    pub fn description(&self) -> String {
132        format!("{}", self.reason)
133    }
134}
135
136#[derive(Clone, Debug, PartialEq, Eq)]
137pub struct BusinessRejectReason {
138    index: usize,
139    reason: String,
140}
141
142impl BusinessRejectReason {
143    pub fn UNKNOWN_MESSAGE_TYPE() -> BusinessRejectReason { BusinessRejectReason { index: 3, reason: "Unsupported Message Type".to_string() } }
144
145    pub fn index(&self) -> usize {
146        self.index
147    }
148
149    pub fn reason(&self) -> &str {
150        self.reason.as_ref()
151    }
152
153    pub fn description(&self) -> String {
154        format!("{}", self.reason)
155    }
156}