use std::io;
use errortools::MainResult;
#[derive(Debug, thiserror::Error)]
enum AppError {
#[error(transparent)]
Io(#[from] ConfigError),
}
#[derive(Debug, thiserror::Error)]
enum ConfigError {
#[error("failed to load config")]
Load(#[source] FileError),
}
#[derive(Debug, thiserror::Error)]
enum FileError {
#[error("failed to read file")]
Read(#[source] io::Error),
}
fn load() -> Result<(), ConfigError> {
Err(ConfigError::Load(FileError::Read(io::Error::new(
io::ErrorKind::NotFound,
"missing",
))))
}
fn main() -> MainResult<AppError> {
load().map_err(AppError::from)?;
Ok(())
}