devops-models 0.1.0

Typed serde models for DevOps configuration formats: Kubernetes, Docker Compose, GitLab CI, GitHub Actions, Prometheus, Alertmanager, Helm, Ansible, and OpenAPI.
Documentation
//! Unified error type for devops-models.
//!
//! # Example
//!
//! ```rust
//! use devops_models::{DevopsError, Result};
//!
//! fn parse(yaml: &str) -> Result<serde_json::Value> {
//!     serde_yaml::from_str(yaml)
//!         .map_err(|e| DevopsError::YamlParse(e.to_string()))
//! }
//! ```

use thiserror::Error;

/// Unified error type for DevOps model operations.
#[derive(Debug, Error)]
pub enum DevopsError {
    /// YAML parsing or deserialization error.
    #[error("YAML parse error: {0}")]
    YamlParse(String),

    /// JSON parsing or deserialization error.
    #[error("JSON parse error: {0}")]
    JsonParse(String),

    /// Semantic or structural validation failure.
    #[error("Validation error: {0}")]
    Validation(String),

    /// LLM API client error.
    #[error("LLM client error: {0}")]
    LlmClient(String),

    /// Generic I/O error.
    #[error("IO error: {0}")]
    Io(String),
}

/// Convenience alias for `Result<T, DevopsError>`.
pub type Result<T> = core::result::Result<T, DevopsError>;

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn error_display() {
        let e = DevopsError::YamlParse("unexpected token".to_string());
        assert_eq!(e.to_string(), "YAML parse error: unexpected token");
    }

    #[test]
    fn result_alias() {
        let ok: Result<u32> = Ok(42);
        assert!(matches!(ok, Ok(42)));
        let err: Result<u32> = Err(DevopsError::Validation("bad".to_string()));
        assert!(err.is_err());
    }
}