etz 0.3.0

CLI for coordinating git worktrees across multi-repo parent directories.
Documentation
use anyhow::Error;
use thiserror::Error;

pub const EXIT_OK: i32 = 0;
pub const EXIT_USAGE: i32 = 2;
pub const EXIT_NOT_INITIALIZED: i32 = 10;
pub const EXIT_NOT_FOUND: i32 = 11;
pub const EXIT_VALIDATION: i32 = 12;
pub const EXIT_GIT: i32 = 20;
pub const EXIT_CHECK_FAILED: i32 = 30;
pub const EXIT_INTERNAL: i32 = 70;

#[derive(Debug, Error)]
#[error("{message}")]
pub struct CliExitError {
    pub code: i32,
    pub message: String,
}

pub fn exit_error(code: i32, message: impl Into<String>) -> Error {
    CliExitError {
        code,
        message: message.into(),
    }
    .into()
}

pub fn err<T>(code: i32, message: impl Into<String>) -> anyhow::Result<T> {
    Err(exit_error(code, message))
}

pub fn exit_code_for(err: &Error) -> i32 {
    if let Some(coded) = err.downcast_ref::<CliExitError>() {
        coded.code
    } else {
        EXIT_INTERNAL
    }
}