use std::ffi::OsString;
use std::io::Error;
use std::path::PathBuf;
use thiserror::Error;
use uucore::display::Quotable;
use uucore::error::UError;
use uucore::libc;
use uucore::translate;
#[derive(Debug, Error)]
pub enum ChrootError {
#[error("{}", translate!("chroot-error-cannot-enter", "dir" => _0.quote(), "err" => _1))]
CannotEnter(PathBuf, #[source] Error),
#[error("{}", translate!("chroot-error-command-failed", "cmd" => _0.quote(), "err" => _1))]
CommandFailed(OsString, #[source] Error),
#[error("{}", translate!("chroot-error-command-not-found", "cmd" => _0.quote(), "err" => _1))]
CommandNotFound(OsString, #[source] Error),
#[error("{}", translate!("chroot-error-groups-parsing-failed"))]
GroupsParsingFailed,
#[error("{}", translate!("chroot-error-invalid-group", "group" => _0.quote()))]
InvalidGroup(String),
#[error("{}", translate!("chroot-error-invalid-group-list", "list" => _0.quote()))]
InvalidGroupList(String),
#[error("{}", translate!("chroot-error-missing-newroot", "util_name" => uucore::execution_phrase()))]
MissingNewRoot,
#[error("{}", translate!("chroot-error-no-group-specified", "uid" => _0))]
NoGroupSpecified(libc::uid_t),
#[error("{}", translate!("chroot-error-no-such-user"))]
NoSuchUser,
#[error("{}", translate!("chroot-error-no-such-group"))]
NoSuchGroup,
#[error("{}", translate!("chroot-error-no-such-directory", "dir" => _0.quote()))]
NoSuchDirectory(PathBuf),
#[error("{}", translate!("chroot-error-set-gid-failed", "gid" => _0, "err" => _1))]
SetGidFailed(String, #[source] Error),
#[error("{}", translate!("chroot-error-set-groups-failed", "err" => _0))]
SetGroupsFailed(Error),
#[error("{}", translate!("chroot-error-set-user-failed", "user" => _0.maybe_quote(), "err" => _1))]
SetUserFailed(String, #[source] Error),
}
impl UError for ChrootError {
fn code(&self) -> i32 {
match self {
Self::CommandFailed(_, _) => 126,
Self::CommandNotFound(_, _) => 127,
_ => 125,
}
}
}