pub type NssRes<T> = Result<T, NssErr>;
#[derive(Debug, PartialEq, Eq)]
pub struct NssErr {
c_err: i32,
nss: NssStatus,
dns: HostStatus,
}
impl NssErr {
pub const SUCCESS: Self = Self {
c_err: 0,
nss: NssStatus::Success,
dns: HostStatus::Success,
};
pub const NO_RESULT: Self = Self {
c_err: 0,
nss: NssStatus::NotFound,
dns: HostStatus::NoData,
};
pub const INVALID_INPUT: Self = Self {
c_err: libc::EINVAL,
nss: NssStatus::Unavailable,
dns: HostStatus::NoRecovery,
};
pub const PLUGIN_FAILED: Self = Self {
c_err: libc::EIO,
nss: NssStatus::Unavailable,
dns: HostStatus::NoRecovery,
};
pub(crate) const BUF_TOO_SMALL: Self = Self {
c_err: libc::EAGAIN,
nss: NssStatus::TryAgain,
dns: HostStatus::TryAgain,
};
pub(crate) fn bail(self, errnop: &mut libc::c_int, h_errnop: &mut libc::c_int) -> libc::c_int {
*errnop = self.c_err;
*h_errnop = self.dns as i32;
self.nss as i32
}
}
#[derive(Debug, PartialEq, Eq)]
pub enum NssStatus {
TryAgain = -2,
Unavailable,
NotFound,
Success,
}
#[derive(Debug, PartialEq, Eq)]
pub enum HostStatus {
Internal = -1,
Success,
HostNotFound,
TryAgain,
NoRecovery,
NoData,
}