use super::*;
use ::safer_ffi::derive_ReprC;

pub use crate::FfiResult;

pub type FfiResultBox<T> = crate::FfiResult<repr_c::Box<T>>;

#[derive_ReprC]
#[repr(C)]
pub struct Result_Box<T>
where
    T: FfiDropBox,
{
    pub status_code: i32,
    pub ok_value: Option<repr_c::Box<T>>,
}

#[derive_ReprC]
#[repr(C)]
pub struct Result<T: NonOpaque> {
    pub status_code: i32,
    pub ok_value: T,
}

#[derive_ReprC]
#[repr(C)]
pub struct Result_Vec<T: NonOpaque> {
    pub status_code: i32,
    pub c_vec: Option<repr_c::Vec<T>>,
}

#[derive_ReprC]
#[repr(C)]
pub struct Result_BoxedSlice<T: NonOpaque> {
    pub status_code: i32,
    pub c_slice: Option<c_slice::Box<T>>,
}

#[derive_ReprC]
#[repr(C)]
pub struct Result_OptionBoxedSlice<T: NonOpaque> {
    pub status_code: i32,
    pub c_slice: Option<c_slice::Box<T>>,
}

#[derive_ReprC]
#[repr(C)]
pub struct Result_OptionBoxedCharPtr {
    pub status_code: i32,
    pub c_string: Option<char_p::Box>,
}
