xidl-xcdr 0.2.0

A IDL codegen.
Documentation
mod cdr;
mod delimited_cdr;
mod macros;
mod plain_cdr2;
mod plcdr;
mod plcdr2;
mod xcdr_plcdr;

use crate::error::{XcdrError, XcdrResult};

#[repr(C)]
pub enum XcdrFfiError {
    Ok = 0,
    BufferOverflow = 1,
    Message = 2,
    NullPointer = 3,
}

#[repr(C)]
pub struct XcdrBuffer {
    pub ptr: *mut u8,
    pub len: usize,
    pub pos: usize,
}

#[repr(C)]
pub struct XcdrConstBuffer {
    pub ptr: *const u8,
    pub len: usize,
    pub pos: usize,
}

#[repr(C)]
pub struct XcdrBufferResult {
    pub err: XcdrFfiError,
    pub used: usize,
}

impl From<XcdrError> for XcdrFfiError {
    fn from(err: XcdrError) -> Self {
        match err {
            XcdrError::BufferOverflow => Self::BufferOverflow,
            XcdrError::Message(_) => Self::Message,
        }
    }
}

impl From<XcdrResult<()>> for XcdrFfiError {
    fn from(err: XcdrResult<()>) -> Self {
        match err {
            Ok(_) => Self::Ok,
            Err(err) => err.into(),
        }
    }
}