wip: convert to thiserror and anyhow

This commit is contained in:
2023-11-26 11:34:26 +11:00
parent c03adb808a
commit aabf39f041
5 changed files with 50 additions and 52 deletions

View File

@@ -42,7 +42,7 @@ pub struct Config {
impl Config {
pub fn find(search_path: Vec<String>) -> Result<Config, Box<dyn std_error::Error>> {
if search_path.is_empty() {
return Err(wingmate_error::InvalidConfigSearchPathError.into());
return Err(wingmate_error::WingmateInitError::InvalidConfigSearchPath.into());
}
let mut svc_commands: Vec<Command> = Vec::new();
@@ -81,7 +81,7 @@ impl Config {
}
if svc_commands.is_empty() && cron.is_empty() {
return Err(wingmate_error::NoServiceOrCronFoundError.into());
return Err(wingmate_error::WingmateInitError::NoServiceOrCron.into());
}
let mut config = Config {

View File

@@ -11,7 +11,7 @@ use nix::sys::signal::{kill, Signal};
use nix::errno::Errno;
use nix::unistd::Pid;
use crate::init::config;
use crate::init::error::{NoShellAvailableError, SpawnError};
use crate::init::error::{NoShellAvailableError, WingmateInitError};
pub fn start_services(ts: &mut JoinSet<Result<(), Box<dyn error::Error + Send + Sync>>>, cfg: &config::Config, cancel: CancellationToken)
@@ -32,7 +32,7 @@ pub fn start_services(ts: &mut JoinSet<Result<(), Box<dyn error::Error + Send +
config::Command::Direct(c) => {
let exp_str = c.clone();
child = Command::new(c).spawn().map_err(|e| {
Box::new(SpawnError(format!("{}: {}", exp_str, e)))
Box::new(WingmateInitError::SpawnError { source: e, message: exp_str })
})?;
},
config::Command::ShellPrefixed(s) => {
@@ -40,7 +40,7 @@ pub fn start_services(ts: &mut JoinSet<Result<(), Box<dyn error::Error + Send +
let exp_str = s.clone();
let exp_shell = shell.clone();
child = Command::new(shell).arg(s).spawn().map_err(|e| {
Box::new(SpawnError(format!("{} {}: {}", exp_shell, exp_str, e)))
Box::new(WingmateInitError::SpawnError { source: e, message: format!("{} {}", exp_shell, exp_str) })
})?;
}
}

View File

@@ -1,40 +1,25 @@
use thiserror::Error;
use std::fmt;
use std::error;
pub enum WingmateErrorKind {
SpawnError,
#[derive(Error,Debug)]
pub enum WingmateInitError {
#[error("invalid config search path")]
InvalidConfigSearchPath,
#[error("no service or cron found")]
NoServiceOrCron,
#[allow(dead_code)]
Other,
}
pub trait WingmateError {
fn wingmate_error_kind(&self) -> WingmateErrorKind;
}
#[derive(Debug, Clone)]
pub struct InvalidConfigSearchPathError;
impl fmt::Display for InvalidConfigSearchPathError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "invalid config search path")
#[error("failed to spawn: {}", message)]
SpawnError {
#[source]
source: std::io::Error,
message: String,
}
}
impl error::Error for InvalidConfigSearchPathError {}
#[derive(Debug,Clone)]
pub struct NoServiceOrCronFoundError;
impl fmt::Display for NoServiceOrCronFoundError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "no service or cron found")
}
}
impl error::Error for NoServiceOrCronFoundError {}
#[derive(Debug,Clone)]
pub struct CronSyntaxError(pub String);
@@ -67,20 +52,3 @@ impl fmt::Display for NoShellAvailableError {
}
impl error::Error for NoShellAvailableError {}
#[derive(Debug,Clone)]
pub struct SpawnError(pub String);
impl fmt::Display for SpawnError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "failed to spawn: {}", self.0)
}
}
impl error::Error for SpawnError {}
impl WingmateError for SpawnError {
fn wingmate_error_kind(&self) -> WingmateErrorKind {
WingmateErrorKind::SpawnError
}
}