simdjson_rust/ondemand/
number.rs

1use std::{marker::PhantomData, ptr::NonNull};
2
3use simdjson_sys as ffi;
4
5use super::{Document, NumberType};
6use crate::macros::impl_drop;
7
8pub struct Number<'a> {
9    ptr: NonNull<ffi::SJ_OD_number>,
10    _doc: PhantomData<&'a mut Document<'a, 'a>>,
11}
12
13impl<'a> Number<'a> {
14    pub fn new(ptr: NonNull<ffi::SJ_OD_number>) -> Self {
15        Self {
16            ptr,
17            _doc: PhantomData,
18        }
19    }
20
21    pub fn get_uint64(&mut self) -> u64 {
22        unsafe { ffi::SJ_OD_number_get_uint64(self.ptr.as_mut()) }
23    }
24
25    pub fn get_int64(&mut self) -> i64 {
26        unsafe { ffi::SJ_OD_number_get_int64(self.ptr.as_mut()) }
27    }
28
29    pub fn get_double(&mut self) -> f64 {
30        unsafe { ffi::SJ_OD_number_get_double(self.ptr.as_mut()) }
31    }
32
33    pub fn get_number_type(&mut self) -> NumberType {
34        unsafe { ffi::SJ_OD_number_get_number_type(self.ptr.as_mut()) }.into()
35    }
36}
37
38impl_drop!(Number<'a>, ffi::SJ_OD_number_free);