use std::fmt;
use crate::binding::*;
use crate::chkerr;
use crate::Context;
use crate::Result;
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]
pub struct Version {
major: i32,
minor: i32,
update: i32,
patch: i32,
port_update: i32,
}
impl Version {
pub fn new(major: i32, minor: i32, update: i32, patch: i32, port_update: i32) -> Version {
Version {
major: major,
minor: minor,
update: update,
patch: patch,
port_update: port_update,
}
}
pub fn client() -> Result<Version> {
let ctx = Context::get()?;
let mut dpi_ver = Default::default();
chkerr!(ctx, dpiContext_getClientVersion(ctx.context, &mut dpi_ver));
Ok(Version::new_from_dpi_ver(dpi_ver))
}
pub(crate) fn new_from_dpi_ver(ver: dpiVersionInfo) -> Version {
Version::new(
ver.versionNum,
ver.releaseNum,
ver.updateNum,
ver.portReleaseNum,
ver.portUpdateNum,
)
}
pub fn major(&self) -> i32 {
self.major
}
pub fn minor(&self) -> i32 {
self.minor
}
pub fn update(&self) -> i32 {
self.update
}
pub fn patch(&self) -> i32 {
self.patch
}
pub fn port_update(&self) -> i32 {
self.port_update
}
}
impl fmt::Display for Version {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
f,
"{}.{}.{}.{}.{}",
self.major, self.minor, self.update, self.patch, self.port_update
)
}
}