use std::ptr::NonNull;
use litert_sys as sys;
use crate::{check, Result};
pub struct Environment {
ptr: NonNull<sys::LiteRtEnvironmentT>,
}
impl std::fmt::Debug for Environment {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("Environment")
.field("ptr", &self.ptr.as_ptr())
.finish()
}
}
impl Environment {
pub fn new() -> Result<Self> {
let mut raw: sys::LiteRtEnvironment = std::ptr::null_mut();
check(unsafe { sys::LiteRtCreateEnvironment(0, std::ptr::null(), &mut raw) })?;
let ptr = NonNull::new(raw).ok_or(crate::Error::NullPointer)?;
Ok(Self { ptr })
}
pub(crate) fn as_raw(&self) -> sys::LiteRtEnvironment {
self.ptr.as_ptr()
}
}
impl Drop for Environment {
fn drop(&mut self) {
unsafe { sys::LiteRtDestroyEnvironment(self.ptr.as_ptr()) }
}
}
unsafe impl Send for Environment {}
unsafe impl Sync for Environment {}