Skip to main content

reqtls/
version.rs

1use std::fmt::{Debug, Formatter};
2
3#[derive(PartialEq)]
4pub struct Version(u16);
5
6impl Version {
7    pub const TLS_1_0: Version = Version(0x301);
8    pub const TLS_1_1: Version = Version(0x302);
9    pub const TLS_1_2: Version = Version(0x303);
10    pub const TLS_1_3: Version = Version(0x304);
11}
12
13impl Version {
14    pub fn new(v: u16) -> Version {
15        Version(v)
16    }
17
18    pub fn into_inner(self) -> u16 { self.0 }
19    
20    pub(crate) fn as_u16(&self) -> u16 {
21        self.0
22    }
23
24    pub(crate) fn as_ja4_str(&self) -> &'static str {
25        match self.0 {
26            0x301 => "10",
27            0x302 => "11",
28            0x303 => "12",
29            0x304 => "13",
30            _ => ""
31        }
32    }
33
34    pub(crate) fn is_reverse(&self) -> bool {
35        !matches!(self.0, 0x301..=0x304)
36    }
37}
38
39impl Debug for Version {
40    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
41        match self.0 {
42            0x301 => write!(f, "TLS_1_0(0x{:x})", self.0),
43            0x302 => write!(f, "TLS_1_1(0x{:x})", self.0),
44            0x303 => write!(f, "TLS_1_2(0x{:x})", self.0),
45            0x304 => write!(f, "TLS_1_3(0x{:x})", self.0),
46            _ => write!(f, "Reserved({})", self.0)
47        }
48    }
49}