agents-docs-manager 0.1.0

Manage AGENTS.md and Docs markdown indexes for agent-oriented repositories.
use serde_json::{Value, json};
use thiserror::Error;

pub type AppResult<T> = Result<T, AppError>;

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

impl AppError {
    pub fn validation(code: impl Into<String>, message: impl Into<String>, details: Value) -> Self {
        Self {
            code: code.into(),
            message: message.into(),
            details,
            exit_code: 1,
        }
    }

    pub fn input(code: impl Into<String>, message: impl Into<String>) -> Self {
        Self {
            code: code.into(),
            message: message.into(),
            details: json!({}),
            exit_code: 2,
        }
    }

    pub fn input_with_details(
        code: impl Into<String>,
        message: impl Into<String>,
        details: Value,
    ) -> Self {
        Self {
            code: code.into(),
            message: message.into(),
            details,
            exit_code: 2,
        }
    }

    pub fn fs(
        code: impl Into<String>,
        message: impl Into<String>,
        path: impl Into<String>,
        source: &std::io::Error,
    ) -> Self {
        Self {
            code: code.into(),
            message: message.into(),
            details: json!({
                "path": path.into(),
                "source": source.to_string()
            }),
            exit_code: 2,
        }
    }
}