simdjson-rust 0.3.0-alpha.2

Rust bindings for the simdjson project.
Documentation
use std::{marker::PhantomData, ptr::NonNull};

use simdjson_sys as ffi;

use super::{Document, NumberType};
use crate::macros::impl_drop;

pub struct Number<'a> {
    ptr: NonNull<ffi::SJ_OD_number>,
    _doc: PhantomData<&'a mut Document<'a, 'a>>,
}

impl<'a> Number<'a> {
    pub fn new(ptr: NonNull<ffi::SJ_OD_number>) -> Self {
        Self {
            ptr,
            _doc: PhantomData,
        }
    }

    pub fn get_uint64(&mut self) -> u64 {
        unsafe { ffi::SJ_OD_number_get_uint64(self.ptr.as_mut()) }
    }

    pub fn get_int64(&mut self) -> i64 {
        unsafe { ffi::SJ_OD_number_get_int64(self.ptr.as_mut()) }
    }

    pub fn get_double(&mut self) -> f64 {
        unsafe { ffi::SJ_OD_number_get_double(self.ptr.as_mut()) }
    }

    pub fn get_number_type(&mut self) -> NumberType {
        unsafe { ffi::SJ_OD_number_get_number_type(self.ptr.as_mut()) }.into()
    }
}

impl_drop!(Number<'a>, ffi::SJ_OD_number_free);