sea-orm-ffi 0.1.3

Compatibility layer for Sea-ORM when crossing a Rust-to-Rust FFI boundary
Documentation
#[repr(C)]
pub(crate) enum FfiResult<T, E> {
	Ok(T),
	Err(E)
}

impl<T, E> FfiResult<T, E> {
	pub(crate) fn map<F: FnOnce(T) -> U, U>(self, f: F) -> FfiResult<U, E> {
		match self {
			Self::Ok(value) => FfiResult::Ok(f(value)),
			Self::Err(err) => FfiResult::Err(err)
		}
	}

	pub(crate) fn map_err<F: FnOnce(E) -> U, U>(self, f: F) -> FfiResult<T, U> {
		match self {
			Self::Ok(value) => FfiResult::Ok(value),
			Self::Err(err) => FfiResult::Err(f(err))
		}
	}

	pub(crate) fn unwrap_or_else<F: FnOnce(E) -> T>(self, f: F) -> T {
		match self {
			Self::Ok(value) => value,
			Self::Err(err) => f(err)
		}
	}

	pub(crate) fn into_result(self) -> Result<T, E> {
		self.into()
	}
}

impl<T, E> From<Result<T, E>> for FfiResult<T, E> {
	fn from(value: Result<T, E>) -> Self {
		value.map(Self::Ok).unwrap_or_else(Self::Err)
	}
}

impl<T, E> From<FfiResult<T, E>> for Result<T, E> {
	fn from(value: FfiResult<T, E>) -> Self {
		value.map(Self::Ok).unwrap_or_else(Self::Err)
	}
}