nodex_api/value/name/
symbol.rs

1use crate::{api, prelude::*};
2use std::{mem::MaybeUninit, os::raw::c_char};
3
4#[derive(Copy, Clone, Debug)]
5pub struct JsSymbol(pub(crate) JsValue);
6
7impl JsSymbol {
8    pub(crate) fn from_value(value: JsValue) -> JsSymbol {
9        JsSymbol(value)
10    }
11
12    /// This API creates a JavaScript symbol value from a UTF8-encoded C string.
13    /// The JavaScript symbol type is described in Section 19.4 of the ECMAScript Language Specification.
14    pub fn new(env: NapiEnv) -> NapiResult<JsSymbol> {
15        let value = napi_call!(=napi_create_symbol, env, std::ptr::null_mut());
16        Ok(JsSymbol::from_value(JsValue::from_raw(env, value)))
17    }
18
19    /// Symbol with description.
20    pub fn description(env: NapiEnv, desc: JsString) -> NapiResult<JsSymbol> {
21        let value = napi_call!(=napi_create_symbol, env, desc.raw());
22        Ok(JsSymbol::from_value(JsValue::from_raw(env, value)))
23    }
24}
25
26napi_value_t!(JsSymbol);
27
28impl NapiValueCheck for JsSymbol {
29    fn check(&self) -> NapiResult<bool> {
30        Ok(self.kind()? == NapiValuetype::Symbol)
31    }
32}