1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// Copyright 2016 James Bendig. See the COPYRIGHT file at the top-level
// directory of this distribution.
//
// Licensed under:
// the MIT license
// <LICENSE-MIT or https://opensource.org/licenses/MIT>
// or the Apache License, Version 2.0
// <LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0>,
// at your option. This file may not be copied, modified, or distributed
// except according to those terms.
#[derive(Clone,Copy,Debug,PartialEq)]
#[allow(non_camel_case_types)]
pub enum MessageVersion { //Based on the ApplVerId(1128) field.
//Unsupported FIX27,
//Unsupported FIX30,
FIX40,
FIX41,
FIX42,
FIX43,
FIX44,
FIX50,
FIX50SP1,
FIX50SP2,
}
impl MessageVersion {
pub fn new(value: u32) -> Option<MessageVersion> {
match value {
//Unsupported 0 => MessageVersion::FIX27,
//Unsupported 1 => MessageVersion::FIX30,
2 => Some(MessageVersion::FIX40),
3 => Some(MessageVersion::FIX41),
4 => Some(MessageVersion::FIX42),
5 => Some(MessageVersion::FIX43),
6 => Some(MessageVersion::FIX44),
7 => Some(MessageVersion::FIX50),
8 => Some(MessageVersion::FIX50SP1),
9 => Some(MessageVersion::FIX50SP2),
_ => None,
}
}
pub fn from_bytes(bytes: &[u8]) -> Option<MessageVersion> {
match bytes {
//Unsupported b"0" => MessageVersion::FIX27,
//Unsupported b"1" => MessageVersion::FIX30,
b"2" => Some(MessageVersion::FIX40),
b"3" => Some(MessageVersion::FIX41),
b"4" => Some(MessageVersion::FIX42),
b"5" => Some(MessageVersion::FIX43),
b"6" => Some(MessageVersion::FIX44),
b"7" => Some(MessageVersion::FIX50),
b"8" => Some(MessageVersion::FIX50SP1),
b"9" => Some(MessageVersion::FIX50SP2),
_ => None,
}
}
pub fn as_value(&self) -> u8 {
match *self {
//Unsupported MessageVersion::FIX27 => 0,
//Unsupported MessageVersion::FIX30 => 1,
MessageVersion::FIX40 => 2,
MessageVersion::FIX41 => 3,
MessageVersion::FIX42 => 4,
MessageVersion::FIX43 => 5,
MessageVersion::FIX44 => 6,
MessageVersion::FIX50 => 7,
MessageVersion::FIX50SP1 => 8,
MessageVersion::FIX50SP2 => 9,
}
}
pub fn as_bytes(&self) -> &[u8] {
match *self {
//Unsupported MessageVersion::FIX27 => b"0",
//Unsupported MessageVersion::FIX30 => b"1",
MessageVersion::FIX40 => b"2",
MessageVersion::FIX41 => b"3",
MessageVersion::FIX42 => b"4",
MessageVersion::FIX43 => b"5",
MessageVersion::FIX44 => b"6",
MessageVersion::FIX50 => b"7",
MessageVersion::FIX50SP1 => b"8",
MessageVersion::FIX50SP2 => b"9",
}
}
pub fn all() -> Vec<MessageVersion> {
vec![
MessageVersion::FIX40,
MessageVersion::FIX41,
MessageVersion::FIX42,
MessageVersion::FIX43,
MessageVersion::FIX44,
MessageVersion::FIX50,
MessageVersion::FIX50SP1,
MessageVersion::FIX50SP2
]
}
}