use core::ffi::CStr;
use lwgeom_sys::*;
use crate::{LWGeom, LWGeomError, Result};
pub(crate) struct LWGeomParserResult {
inner: *mut LWGEOM_PARSER_RESULT,
}
impl LWGeomParserResult {
pub fn new() -> Result<Self> {
let boxed_result = Box::new(unsafe { std::mem::zeroed::<LWGEOM_PARSER_RESULT>() });
let inner = Box::into_raw(boxed_result);
unsafe { lwgeom_parser_result_init(inner) }
Ok(Self { inner })
}
pub fn inner_ptr(&self) -> *mut LWGEOM_PARSER_RESULT {
self.inner
}
fn inner_ref(&self) -> Result<&LWGEOM_PARSER_RESULT> {
unsafe { self.inner.as_ref() }.ok_or(LWGeomError::NullPtrError)
}
pub fn geom(&self) -> Result<LWGeom> {
LWGeom::new_from_raw(self.inner_ref()?.geom)
}
pub fn message(&self) -> Result<String> {
Ok(unsafe { CStr::from_ptr(self.inner_ref()?.message) }
.to_string_lossy()
.to_string())
}
}
unsafe impl Send for LWGeomParserResult {}
unsafe impl Sync for LWGeomParserResult {}