//! # aspect-std
//!
//! Standard aspects library providing common, production-ready aspects.
//!
//! This crate provides a collection of reusable aspects for common cross-cutting concerns:
//! - **Logging**: Structured logging with configurable levels
//! - **Timing**: Performance monitoring with statistics
//! - **Caching**: Generic memoization with TTL
//! - **Metrics**: Counters, gauges, and histograms
//! - **Rate Limiting**: Token bucket algorithm for throttling
//! - **Circuit Breaker**: Fault tolerance and failure prevention
//! - **Authorization**: Role-based access control
//! - **Validation**: Pre/post condition checking
//!
//! ## Quick Start
//!
//! ```rust,ignore
//! use aspect_std::prelude::*;
//! use aspect_macros::aspect;
//!
//! // Use the standard logging aspect
//! #[aspect(LoggingAspect::new())]
//! fn my_function(x: i32) -> i32 {
//!     x * 2
//! }
//! ```

pub mod logging;
pub mod timing;
pub mod caching;
pub mod metrics;
pub mod ratelimit;
pub mod circuitbreaker;
pub mod authorization;
pub mod validation;

// Agentic-AI aspects (ICSE 2027 evaluation set)
pub mod toolscope;
pub mod tokenbudget;
pub mod audit;

// Re-export commonly used types
pub use logging::LoggingAspect;
pub use timing::TimingAspect;
pub use caching::CachingAspect;
pub use metrics::MetricsAspect;
pub use ratelimit::RateLimitAspect;
pub use circuitbreaker::{CircuitBreakerAspect, CircuitState};
pub use authorization::{AllowlistAspect, AllowlistCall, AuthMode, AuthorizationAspect};
pub use validation::{ValidationAspect, ValidationRule};
pub use toolscope::{ToolCall, ToolScopeSandboxAspect};
pub use tokenbudget::{TokenBudgetAspect, TokenCharge};
pub use audit::{ActionAuditTrailAspect, AuditContext, AuditRecord};

/// Prelude module for convenient imports.
pub mod prelude {
    pub use crate::logging::LoggingAspect;
    pub use crate::timing::TimingAspect;
    pub use crate::caching::CachingAspect;
    pub use crate::metrics::MetricsAspect;
    pub use crate::ratelimit::RateLimitAspect;
    pub use crate::circuitbreaker::{CircuitBreakerAspect, CircuitState};
    pub use crate::authorization::{AllowlistAspect, AllowlistCall, AuthMode, AuthorizationAspect};
    pub use crate::validation::{ValidationAspect, ValidationRule};
    pub use crate::toolscope::{ToolCall, ToolScopeSandboxAspect};
    pub use crate::tokenbudget::{TokenBudgetAspect, TokenCharge};
    pub use crate::audit::{ActionAuditTrailAspect, AuditContext, AuditRecord};
}
