nodex_api/value/
dataview.rs1use crate::{api, prelude::*};
2use std::{mem::MaybeUninit, os::raw::c_char};
3
4#[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 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}