napi_h/js_values/
number.rs

1use std::convert::TryFrom;
2
3use super::Value;
4use crate::bindgen_runtime::{TypeName, ValidateNapiValue};
5use crate::{check_status, ValueType};
6use crate::{sys, Error, Result};
7
8#[derive(Clone, Copy)]
9pub struct JsNumber(pub(crate) Value);
10
11impl TypeName for JsNumber {
12  fn type_name() -> &'static str {
13    "f64"
14  }
15
16  fn value_type() -> crate::ValueType {
17    ValueType::Number
18  }
19}
20
21impl ValidateNapiValue for JsNumber {}
22
23impl JsNumber {
24  pub fn get_uint32(&self) -> Result<u32> {
25    let mut result = 0;
26    check_status!(unsafe { sys::napi_get_value_uint32(self.0.env, self.0.value, &mut result) })?;
27    Ok(result)
28  }
29
30  pub fn get_int32(&self) -> Result<i32> {
31    let mut result = 0;
32    check_status!(unsafe { sys::napi_get_value_int32(self.0.env, self.0.value, &mut result) })?;
33    Ok(result)
34  }
35
36  pub fn get_int64(&self) -> Result<i64> {
37    let mut result = 0;
38    check_status!(unsafe { sys::napi_get_value_int64(self.0.env, self.0.value, &mut result) })?;
39    Ok(result)
40  }
41
42  pub fn get_double(&self) -> Result<f64> {
43    let mut result = 0_f64;
44    check_status!(unsafe { sys::napi_get_value_double(self.0.env, self.0.value, &mut result) })?;
45    Ok(result)
46  }
47}
48
49impl TryFrom<JsNumber> for u32 {
50  type Error = Error;
51
52  fn try_from(value: JsNumber) -> Result<u32> {
53    let mut result = 0;
54    check_status!(unsafe { sys::napi_get_value_uint32(value.0.env, value.0.value, &mut result) })?;
55    Ok(result)
56  }
57}
58
59impl TryFrom<JsNumber> for i32 {
60  type Error = Error;
61
62  fn try_from(value: JsNumber) -> Result<i32> {
63    let mut result = 0;
64    check_status!(unsafe { sys::napi_get_value_int32(value.0.env, value.0.value, &mut result) })?;
65    Ok(result)
66  }
67}
68
69impl TryFrom<JsNumber> for i64 {
70  type Error = Error;
71
72  fn try_from(value: JsNumber) -> Result<i64> {
73    let mut result = 0;
74    check_status!(unsafe { sys::napi_get_value_int64(value.0.env, value.0.value, &mut result) })?;
75    Ok(result)
76  }
77}
78
79impl TryFrom<JsNumber> for f64 {
80  type Error = Error;
81
82  fn try_from(value: JsNumber) -> Result<f64> {
83    let mut result = 0_f64;
84    check_status!(unsafe { sys::napi_get_value_double(value.0.env, value.0.value, &mut result) })?;
85    Ok(result)
86  }
87}