1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use crate::{api, prelude::*};
use std::{mem::MaybeUninit, os::raw::c_char};
#[derive(Copy, Clone, Debug)]
pub struct JsDataView(pub(crate) JsValue);
impl JsDataView {
pub(crate) fn from_value(value: JsValue) -> JsDataView {
JsDataView(value)
}
pub fn info(&self) -> NapiResult<(DataPointer, JsArrayBuffer, usize, usize)> {
let mut length = MaybeUninit::uninit();
let mut data = MaybeUninit::uninit();
let mut buffer = MaybeUninit::uninit();
let offset = napi_call!(
=napi_get_dataview_info,
self.env(),
self.raw(),
length.as_mut_ptr(),
data.as_mut_ptr(),
buffer.as_mut_ptr(),
);
unsafe {
let length = length.assume_init();
let data = data.assume_init();
let buffer = buffer.assume_init();
Ok((
data,
JsArrayBuffer::from_raw(self.env(), buffer),
offset,
length,
))
}
}
}
napi_value_t!(JsDataView);
impl NapiValueCheck for JsDataView {
fn check(&self) -> NapiResult<bool> {
Ok(napi_call!(=napi_is_dataview, self.env(), self.raw()))
}
}