hyperi-rustlib 2.8.0

There's plenty of sage advice out there about how to run Rust services in production at scale — config cascades, structured logging, masking secrets, multi-backend secrets management, Prometheus, OpenTelemetry, Kafka transports, tiered disk-spillover sinks, adaptive worker pools, graceful shutdown — but almost none of it as code you can just install and use. This is that code. Opinionated, drop-in, working out of the box. The patterns from blog posts, watercooler chats and beers with your Google mates as actual library — not a framework you assemble from twenty crates and 8 weeks of munging.
Documentation
// Project:   hyperi-rustlib
// File:      src/expression/error.rs
// Purpose:   Expression error types
// Language:  Rust
//
// License:   FSL-1.1-ALv2
// Copyright: (c) 2026 HYPERI PTY LIMITED

//! Error types for CEL expression compilation and evaluation.

use thiserror::Error;

/// Errors from expression validation, compilation, or evaluation.
#[derive(Error, Debug)]
pub enum ExpressionError {
    /// Expression failed DFE profile validation or syntax check.
    #[error("Expression validation failed: {}", .0.join("; "))]
    Validation(Vec<String>),

    /// Expression could not be compiled (syntax error).
    #[error("Expression compilation failed: {0}")]
    Compilation(String),

    /// Expression evaluation failed at runtime (missing field, type mismatch).
    #[error("Expression evaluation failed: {0}")]
    Evaluation(String),
}

/// Convenience result type for expression operations.
pub type ExpressionResult<T> = Result<T, ExpressionError>;