1use crate::{sys, Error, Status};
2use std::ffi::CStr;
3
4#[derive(Debug, Clone, Copy)]
5pub struct NodeVersion {
6 pub major: u32,
7 pub minor: u32,
8 pub patch: u32,
9 pub release: &'static str,
10}
11
12impl 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