csskit 0.0.21-canary.a69fe0f08c

Refreshing CSS!
use std::process::ExitCode;

pub enum CliError {
	ParseFailed,
	Checks(usize),
	FilesAndStdin,
	#[allow(dead_code)]
	Io(std::io::Error),
	Fmt(std::fmt::Error),
	SerdeJson(serde_json::Error),
}

impl From<std::io::Error> for CliError {
	fn from(err: std::io::Error) -> Self {
		Self::Io(err)
	}
}

impl From<std::fmt::Error> for CliError {
	fn from(err: std::fmt::Error) -> Self {
		Self::Fmt(err)
	}
}

impl From<serde_json::Error> for CliError {
	fn from(err: serde_json::Error) -> Self {
		Self::SerdeJson(err)
	}
}

impl std::fmt::Debug for CliError {
	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
		match self {
			Self::ParseFailed => write!(f, "Parsing Failed!"),
			Self::FilesAndStdin => {
				write!(f, "Specified multiple files including stdin. Try passing just files, or use `-` for stdin.")
			}
			Self::Checks(i) => f.write_str(&format!("{i} files failed check!")),
			Self::Io(arg0) => f.debug_tuple("::io::Error").field(arg0).finish(),
			Self::Fmt(arg0) => f.debug_tuple("::fmt::Error").field(arg0).finish(),
			Self::SerdeJson(arg0) => f.debug_tuple("::serde_json::Error").field(arg0).finish(),
		}
	}
}

impl From<CliError> for ExitCode {
	fn from(val: CliError) -> Self {
		match val {
			CliError::Checks(i) => (i as u8).into(),
			_ => ExitCode::FAILURE,
		}
	}
}

pub type CliResult = Result<(), CliError>;