1#[derive(Clone, Debug, PartialEq, Eq)]
2pub struct ProtocolVersion {
3 pub(crate) major_ver: u16,
4 pub(crate) minor_ver: u16,
5}
6
7impl ProtocolVersion {
8 pub fn current() -> ProtocolVersion {
9 ProtocolVersion {
10 major_ver: 3,
11 minor_ver: 0,
12 }
13 }
14 pub fn new(major_ver: u16, minor_ver: u16) -> ProtocolVersion {
15 ProtocolVersion {
16 major_ver,
17 minor_ver,
18 }
19 }
20 pub fn version_tuple(&self) -> (u16, u16) {
21 (self.major_ver, self.minor_ver)
22 }
23 pub fn is_1(&self) -> bool {
24 self.major_ver >= 1
25 }
26 pub fn is_2(&self) -> bool {
27 self.major_ver >= 2
28 }
29 pub fn is_3(&self) -> bool {
30 self.major_ver >= 3
31 }
32 pub fn supports_inline_typenames(&self) -> bool {
33 self.version_tuple() >= (0, 9)
34 }
35 pub fn has_implicit_tid(&self) -> bool {
36 self.version_tuple() <= (0, 8)
37 }
38 pub fn has_implicit_id(&self) -> bool {
39 !self.is_1()
44 }
45 pub fn is_multilingual(&self) -> bool {
46 self.is_at_least(3, 0)
47 }
48 pub fn is_at_least(&self, major_ver: u16, minor_ver: u16) -> bool {
49 self.major_ver > major_ver || self.major_ver == major_ver && self.minor_ver >= minor_ver
50 }
51 pub fn is_at_most(&self, major_ver: u16, minor_ver: u16) -> bool {
52 self.major_ver < major_ver || self.major_ver == major_ver && self.minor_ver <= minor_ver
53 }
54}