use super::{AppExchangeInfo, ContainerPermissions, containers_from_repr_c, containers_into_vec};
use ffi::ipc::req as ffi;
use ffi_utils::{ReprC, StringError, vec_into_raw_parts};
use ipc::errors::IpcError;
use std::collections::HashMap;
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
pub struct AuthReq {
pub app: AppExchangeInfo,
pub app_container: bool,
pub containers: HashMap<String, ContainerPermissions>,
}
impl AuthReq {
pub fn into_repr_c(self) -> Result<ffi::AuthReq, IpcError> {
let AuthReq {
app,
app_container,
containers,
} = self;
let containers = containers_into_vec(containers).map_err(StringError::from)?;
let (containers_ptr, containers_len, containers_cap) = vec_into_raw_parts(containers);
Ok(ffi::AuthReq {
app: app.into_repr_c()?,
app_container,
containers: containers_ptr,
containers_len,
containers_cap,
})
}
}
impl ReprC for AuthReq {
type C = *const ffi::AuthReq;
type Error = IpcError;
unsafe fn clone_from_repr_c(repr_c: *const ffi::AuthReq) -> Result<Self, IpcError> {
Ok(AuthReq {
app: AppExchangeInfo::clone_from_repr_c(&(*repr_c).app)?,
app_container: (*repr_c).app_container,
containers: containers_from_repr_c((*repr_c).containers, (*repr_c).containers_len)?,
})
}
}