mod c_api;
pub use c_api::*;
mod bindings;
pub use bindings::*;
mod utils;
pub use utils::*;
mod errors;
pub use errors::*;
#[cfg(test)]
mod tests;
use std::ptr::NonNull;
#[repr(C)]
#[derive(Debug, Clone, PartialEq)]
pub struct FFIResult<T, E> {
pub result: Option<NonNull<T>>,
pub error: Option<NonNull<E>>,
}
impl<T, E> FFIResult<T, E> {
pub fn new(result: T) -> Self {
Self { result: Some(NonNull::new(Box::into_raw(Box::new(result))).unwrap()), error: None }
}
pub fn new_error(error: E) -> Self {
Self { result: None, error: Some(NonNull::new(Box::into_raw(Box::new(error))).unwrap()) }
}
pub fn new_mut(result: *mut T) -> Self {
Self { result: Some(NonNull::new(result).unwrap()), error: None }
}
pub fn new_mut_error(error: *mut E) -> Self {
Self { result: None, error: Some(NonNull::new(error).unwrap()) }
}
}