nodex_api/value/
dataview.rs

1use crate::{api, prelude::*};
2use std::{mem::MaybeUninit, os::raw::c_char};
3
4/// Js Dataview
5///
6/// * N - Offset
7/// * M - Length
8#[derive(Copy, Clone, Debug)]
9pub struct JsDataView(pub(crate) JsValue);
10
11impl JsDataView {
12    pub(crate) fn from_value(value: JsValue) -> JsDataView {
13        JsDataView(value)
14    }
15
16    /// Any of the out parameters may be NULL if that property is unneeded.
17    ///
18    /// This API returns various properties of a DataView.
19    ///
20    /// Info includes (void* data, ArrayBuffer, offset, length)
21    pub fn info(&self) -> NapiResult<(DataPointer, JsArrayBuffer, usize, usize)> {
22        let mut length = MaybeUninit::uninit();
23        let mut data = MaybeUninit::uninit();
24        let mut buffer = MaybeUninit::uninit();
25        let offset = napi_call!(
26            =napi_get_dataview_info,
27            self.env(),
28            self.raw(),
29            length.as_mut_ptr(),
30            data.as_mut_ptr(),
31            buffer.as_mut_ptr(),
32        );
33        unsafe {
34            let length = length.assume_init();
35            let data = data.assume_init();
36            let buffer = buffer.assume_init();
37            Ok((
38                data,
39                JsArrayBuffer::from_raw(self.env(), buffer),
40                offset,
41                length,
42            ))
43        }
44    }
45}
46
47napi_value_t!(JsDataView);
48
49impl NapiValueCheck for JsDataView {
50    fn check(&self) -> NapiResult<bool> {
51        Ok(napi_call!(=napi_is_dataview, self.env(), self.raw()))
52    }
53}