oracledb_protocol/
capabilities.rs1#![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}