Skip to main content

oracledb_protocol/
capabilities.rs

1#![forbid(unsafe_code)]
2
3use crate::{ProtocolError, Result, TNS_VERSION_DESIRED, TNS_VERSION_MIN};
4
5#[derive(Clone, Copy, Debug, Eq, PartialEq)]
6pub struct TnsVersion(u16);
7
8impl TnsVersion {
9    pub fn negotiate(server_version: u16) -> Result<Self> {
10        if server_version < TNS_VERSION_MIN {
11            return Err(ProtocolError::UnsupportedVersion {
12                version: server_version,
13            });
14        }
15
16        Ok(Self(server_version.min(TNS_VERSION_DESIRED)))
17    }
18
19    pub fn as_u16(self) -> u16 {
20        self.0
21    }
22}
23
24#[cfg(test)]
25mod tests {
26    use super::*;
27
28    #[test]
29    fn caps_high_versions_to_reference_desired_version() {
30        assert_eq!(
31            TnsVersion::negotiate(999)
32                .expect("999 should negotiate down to desired reference version")
33                .as_u16(),
34            TNS_VERSION_DESIRED
35        );
36    }
37
38    #[test]
39    fn rejects_versions_below_reference_floor() {
40        assert!(TnsVersion::negotiate(TNS_VERSION_MIN - 1).is_err());
41    }
42}