fixer_fix/fix43/
list_status.rs1#![allow(clippy::new_without_default)]
3#![allow(clippy::needless_pass_by_value)]
4#![allow(clippy::too_many_arguments)]
5#![allow(unused_imports)]
6
7use fixer::message::Message;
8use fixer::fix_string::FIXString;
9use fixer::errors::MessageRejectErrorEnum;
10use fixer::session::session_id::SessionID;
11
12
13use jiff::Timestamp;
14
15use crate::field;
16use crate::tag;
17
18pub struct ListStatus {
20 pub message: Message,
21}
22
23impl ListStatus {
24 pub fn new(list_id: field::ListIDField, list_status_type: field::ListStatusTypeField, no_rpts: field::NoRptsField, list_order_status: field::ListOrderStatusField, rpt_seq: field::RptSeqField, tot_no_orders: field::TotNoOrdersField, no_orders: field::NoOrdersField) -> Self {
26 let mut msg = Message::new();
27 msg.header.set_field(tag::MSG_TYPE, FIXString::from("N".to_string()));
28
29 msg.body.set_field(tag::LIST_ID, list_id.0);
30
31 msg.body.set_field(tag::LIST_STATUS_TYPE, list_status_type.0);
32
33 msg.body.set_field(tag::NO_RPTS, no_rpts.0);
34
35 msg.body.set_field(tag::LIST_ORDER_STATUS, list_order_status.0);
36
37 msg.body.set_field(tag::RPT_SEQ, rpt_seq.0);
38
39 msg.body.set_field(tag::TOT_NO_ORDERS, tot_no_orders.0);
40
41 msg.body.set_field(tag::NO_ORDERS, no_orders.0);
42
43 Self { message: msg }
44 }
45
46 pub fn from_message(msg: Message) -> Self {
48 Self { message: msg }
49 }
50
51 pub fn to_message(self) -> Message {
53 self.message
54 }
55
56
57
58
59 pub fn set_encoded_list_status_text(&mut self, v: String) {
61 self.message.body.set_field(tag::ENCODED_LIST_STATUS_TEXT, FIXString::from(v));
62 }
63
64 pub fn get_encoded_list_status_text(&self) -> Result<String, MessageRejectErrorEnum> {
66 let mut fld = field::EncodedListStatusTextField::new(String::new());
67 self.message.body.get_field(tag::ENCODED_LIST_STATUS_TEXT, &mut fld.0)?;
68 Ok(fld.value().to_string())
69 }
70
71
72 pub fn has_encoded_list_status_text(&self) -> bool {
74 self.message.body.has(tag::ENCODED_LIST_STATUS_TEXT)
75 }
76
77
78
79
80 pub fn set_encoded_list_status_text_len(&mut self, v: isize) {
82 self.message.body.set_field(tag::ENCODED_LIST_STATUS_TEXT_LEN, fixer::fix_int::FIXInt::from(v));
83 }
84
85 pub fn get_encoded_list_status_text_len(&self) -> Result<isize, MessageRejectErrorEnum> {
87 let mut fld = field::EncodedListStatusTextLenField::new(0);
88 self.message.body.get_field(tag::ENCODED_LIST_STATUS_TEXT_LEN, &mut fld.0)?;
89 Ok(fld.value())
90 }
91
92
93 pub fn has_encoded_list_status_text_len(&self) -> bool {
95 self.message.body.has(tag::ENCODED_LIST_STATUS_TEXT_LEN)
96 }
97
98
99
100
101 pub fn set_list_id(&mut self, v: String) {
103 self.message.body.set_field(tag::LIST_ID, FIXString::from(v));
104 }
105
106 pub fn get_list_id(&self) -> Result<String, MessageRejectErrorEnum> {
108 let mut fld = field::ListIDField::new(String::new());
109 self.message.body.get_field(tag::LIST_ID, &mut fld.0)?;
110 Ok(fld.value().to_string())
111 }
112
113
114 pub fn has_list_id(&self) -> bool {
116 self.message.body.has(tag::LIST_ID)
117 }
118
119
120
121
122 pub fn set_list_order_status(&mut self, v: isize) {
124 self.message.body.set_field(tag::LIST_ORDER_STATUS, fixer::fix_int::FIXInt::from(v));
125 }
126
127 pub fn get_list_order_status(&self) -> Result<isize, MessageRejectErrorEnum> {
129 let mut fld = field::ListOrderStatusField::new(0);
130 self.message.body.get_field(tag::LIST_ORDER_STATUS, &mut fld.0)?;
131 Ok(fld.value())
132 }
133
134
135 pub fn has_list_order_status(&self) -> bool {
137 self.message.body.has(tag::LIST_ORDER_STATUS)
138 }
139
140
141
142
143 pub fn set_list_status_text(&mut self, v: String) {
145 self.message.body.set_field(tag::LIST_STATUS_TEXT, FIXString::from(v));
146 }
147
148 pub fn get_list_status_text(&self) -> Result<String, MessageRejectErrorEnum> {
150 let mut fld = field::ListStatusTextField::new(String::new());
151 self.message.body.get_field(tag::LIST_STATUS_TEXT, &mut fld.0)?;
152 Ok(fld.value().to_string())
153 }
154
155
156 pub fn has_list_status_text(&self) -> bool {
158 self.message.body.has(tag::LIST_STATUS_TEXT)
159 }
160
161
162
163
164 pub fn set_list_status_type(&mut self, v: isize) {
166 self.message.body.set_field(tag::LIST_STATUS_TYPE, fixer::fix_int::FIXInt::from(v));
167 }
168
169 pub fn get_list_status_type(&self) -> Result<isize, MessageRejectErrorEnum> {
171 let mut fld = field::ListStatusTypeField::new(0);
172 self.message.body.get_field(tag::LIST_STATUS_TYPE, &mut fld.0)?;
173 Ok(fld.value())
174 }
175
176
177 pub fn has_list_status_type(&self) -> bool {
179 self.message.body.has(tag::LIST_STATUS_TYPE)
180 }
181
182
183
184
185 pub fn set_no_orders(&mut self, v: isize) {
187 self.message.body.set_field(tag::NO_ORDERS, fixer::fix_int::FIXInt::from(v));
188 }
189
190 pub fn get_no_orders(&self) -> Result<isize, MessageRejectErrorEnum> {
192 let mut fld = field::NoOrdersField::new(0);
193 self.message.body.get_field(tag::NO_ORDERS, &mut fld.0)?;
194 Ok(fld.value())
195 }
196
197
198 pub fn has_no_orders(&self) -> bool {
200 self.message.body.has(tag::NO_ORDERS)
201 }
202
203
204
205
206 pub fn set_no_rpts(&mut self, v: isize) {
208 self.message.body.set_field(tag::NO_RPTS, fixer::fix_int::FIXInt::from(v));
209 }
210
211 pub fn get_no_rpts(&self) -> Result<isize, MessageRejectErrorEnum> {
213 let mut fld = field::NoRptsField::new(0);
214 self.message.body.get_field(tag::NO_RPTS, &mut fld.0)?;
215 Ok(fld.value())
216 }
217
218
219 pub fn has_no_rpts(&self) -> bool {
221 self.message.body.has(tag::NO_RPTS)
222 }
223
224
225
226
227 pub fn set_rpt_seq(&mut self, v: isize) {
229 self.message.body.set_field(tag::RPT_SEQ, fixer::fix_int::FIXInt::from(v));
230 }
231
232 pub fn get_rpt_seq(&self) -> Result<isize, MessageRejectErrorEnum> {
234 let mut fld = field::RptSeqField::new(0);
235 self.message.body.get_field(tag::RPT_SEQ, &mut fld.0)?;
236 Ok(fld.value())
237 }
238
239
240 pub fn has_rpt_seq(&self) -> bool {
242 self.message.body.has(tag::RPT_SEQ)
243 }
244
245
246
247
248 pub fn set_tot_no_orders(&mut self, v: isize) {
250 self.message.body.set_field(tag::TOT_NO_ORDERS, fixer::fix_int::FIXInt::from(v));
251 }
252
253 pub fn get_tot_no_orders(&self) -> Result<isize, MessageRejectErrorEnum> {
255 let mut fld = field::TotNoOrdersField::new(0);
256 self.message.body.get_field(tag::TOT_NO_ORDERS, &mut fld.0)?;
257 Ok(fld.value())
258 }
259
260
261 pub fn has_tot_no_orders(&self) -> bool {
263 self.message.body.has(tag::TOT_NO_ORDERS)
264 }
265
266
267
268
269 pub fn set_transact_time(&mut self, v: Timestamp) {
271 self.message.body.set_field(tag::TRANSACT_TIME, fixer::fix_utc_timestamp::FIXUTCTimestamp {
272 time: v,
273 precision: fixer::fix_utc_timestamp::TimestampPrecision::Millis,
274 });
275 }
276
277 pub fn get_transact_time(&self) -> Result<Timestamp, MessageRejectErrorEnum> {
279 let mut fld = field::TransactTimeField::new(Timestamp::UNIX_EPOCH);
280 self.message.body.get_field(tag::TRANSACT_TIME, &mut fld.0)?;
281 Ok(fld.value())
282 }
283
284
285 pub fn has_transact_time(&self) -> bool {
287 self.message.body.has(tag::TRANSACT_TIME)
288 }
289
290
291}
292
293pub type RouteOut = fn(msg: ListStatus, session_id: SessionID) -> Result<(), MessageRejectErrorEnum>;
295
296pub type Route = (&'static str, &'static str, Box<dyn Fn(&Message, SessionID) -> Result<(), MessageRejectErrorEnum> + Send>);
298
299pub fn route(router: RouteOut) -> Route {
301 let r = move |msg: &Message, session_id: SessionID| -> Result<(), MessageRejectErrorEnum> {
302 router(ListStatus::from_message(msg.clone()), session_id)
303 };
304 ("FIX.4.3", "N", Box::new(r))
305}