haqumei 0.3.1

Haqumei is a Japanese Grapheme-to-Phoneme (G2P) library implemented in Rust.
Documentation
use std::{mem::MaybeUninit, ptr::NonNull};

use crate::{errors::HaqumeiError, ffi};

#[derive(Debug)]
pub(crate) struct JpCommon {
    pub(crate) inner: NonNull<ffi::JPCommon>,
}

impl JpCommon {
    pub(crate) fn new() -> Result<Self, HaqumeiError> {
        unsafe {
            let mut jp_common_uninit = Box::new(MaybeUninit::<ffi::JPCommon>::uninit());

            ffi::JPCommon_initialize(jp_common_uninit.as_mut_ptr());

            let jp_common_init = jp_common_uninit.assume_init();

            let raw_ptr = Box::into_raw(jp_common_init);

            match NonNull::new(raw_ptr) {
                Some(inner) => Ok(Self { inner }),
                None => {
                    let _ = Box::from_raw(raw_ptr);
                    Err(HaqumeiError::AllocationError("_JPCommon"))
                }
            }
        }
    }
}

impl Drop for JpCommon {
    fn drop(&mut self) {
        unsafe {
            ffi::JPCommon_clear(self.inner.as_ptr());

            let _ = Box::from_raw(self.inner.as_ptr());
        }
    }
}