libusbk/
version.rs

1use std::fmt;
2
3use libusbk_sys::{LibK_GetVersion, KLIB_VERSION};
4
5/// A structure that describes the version of the underlying `libusbK` library.
6#[derive(Clone, Copy)]
7pub struct LibraryVersion {
8    inner: KLIB_VERSION,
9}
10
11impl LibraryVersion {
12    pub fn new() -> Self {
13        let mut version = KLIB_VERSION::default();
14        unsafe { LibK_GetVersion(&mut version) }
15        Self { inner: version }
16    }
17
18    pub fn major(&self) -> i32 {
19        self.inner.Major
20    }
21
22    pub fn minor(&self) -> i32 {
23        self.inner.Minor
24    }
25
26    pub fn micro(&self) -> i32 {
27        self.inner.Micro
28    }
29
30    pub fn nano(&self) -> i32 {
31        self.inner.Nano
32    }
33}
34
35impl fmt::Debug for LibraryVersion {
36    fn fmt(&self, fmt: &mut fmt::Formatter) -> Result<(), fmt::Error> {
37        let mut debug = fmt.debug_struct("LibraryVersion");
38
39        debug.field("major", &self.major());
40        debug.field("minor", &self.minor());
41        debug.field("micro", &self.micro());
42        debug.field("nano", &self.nano());
43
44        debug.finish()
45    }
46}
47
48impl Default for LibraryVersion {
49    fn default() -> Self {
50        Self::new()
51    }
52}
53
54pub fn version() -> LibraryVersion {
55    LibraryVersion::new()
56}
57
58#[cfg(test)]
59mod tests {
60    use super::*;
61
62    #[test]
63    fn get_version() {
64        let v = version();
65        assert_ne!(v.major(), 0)
66    }
67}