simdjson-rust 0.3.0-alpha.2

Rust bindings for the simdjson project.
Documentation
use std::ptr::NonNull;

use simdjson_sys as ffi;

use super::Element;
use crate::macros::impl_drop;

pub struct Document {
    ptr: NonNull<ffi::SJ_DOM_document>,
}

impl Default for Document {
    fn default() -> Self {
        Self {
            ptr: unsafe { NonNull::new_unchecked(ffi::SJ_DOM_document_new()) },
        }
    }
}

impl Document {
    pub fn new(ptr: NonNull<ffi::SJ_DOM_document>) -> Self {
        Self { ptr }
    }

    pub fn root(&self) -> Element<'_> {
        Element::new(unsafe {
            NonNull::new_unchecked(ffi::SJ_DOM_document_root(self.ptr.as_ptr()))
        })
    }

    pub fn as_ptr(&self) -> *mut ffi::SJ_DOM_document {
        self.ptr.as_ptr()
    }
}

impl_drop!(Document, ffi::SJ_DOM_document_free);