1use std::fmt;
2
3use libusbk_sys::{LibK_GetVersion, KLIB_VERSION};
4
5#[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}