use ockam_core::Error;
use std::os::raw::c_char;
#[repr(C)]
#[derive(Debug, PartialEq)]
pub struct FfiOckamError {
code: i32,
domain: *const c_char,
}
impl FfiOckamError {
pub fn new(code: i32, domain: &'static str) -> Self {
Self {
code,
domain: domain.as_ptr() as *const c_char,
}
}
pub fn none() -> Self {
Self {
code: 0,
domain: std::ptr::null(),
}
}
}
impl From<Error> for FfiOckamError {
fn from(err: Error) -> Self {
Self::new(err.code() as i32, err.domain())
}
}
#[derive(Clone, Copy, Debug)]
pub enum FfiError {
None,
VaultDoesntSupportPersistence,
ErrorCreatingFilesystemVault,
InvalidParam,
EntryNotFound,
UnknownPublicKeyType,
InvalidString,
BufferTooSmall,
InvalidPublicKey,
VaultNotFound,
OwnershipError,
}
impl FfiError {
pub const DOMAIN_CODE: u32 = 13_000;
pub const DOMAIN_NAME: &'static str = "OCKAM_FFI";
}
impl From<FfiError> for Error {
fn from(err: FfiError) -> Self {
Self::new(FfiError::DOMAIN_CODE + (err as u32), FfiError::DOMAIN_NAME)
}
}
impl From<FfiError> for FfiOckamError {
fn from(err: FfiError) -> Self {
let err: Error = err.into();
Self::from(err)
}
}