1 | use crate::{sys, Error, Status}; |
2 | use std::ffi::CStr; |
3 | |
4 | #[derive (Debug, Clone, Copy)] |
5 | pub struct NodeVersion { |
6 | pub major: u32, |
7 | pub minor: u32, |
8 | pub patch: u32, |
9 | pub release: &'static str, |
10 | } |
11 | |
12 | impl TryFrom<sys::napi_node_version> for NodeVersion { |
13 | type Error = Error; |
14 | |
15 | fn try_from(value: sys::napi_node_version) -> Result<NodeVersion, Error> { |
16 | Ok(NodeVersion { |
17 | major: value.major, |
18 | minor: value.minor, |
19 | patch: value.patch, |
20 | release: unsafe { |
21 | CStr::from_ptr(value.release) |
22 | .to_str() |
23 | .map_err(|_| Error::new(Status::StringExpected, reason:"Invalid release name" .to_owned()))? |
24 | }, |
25 | }) |
26 | } |
27 | } |
28 | |