Skip to main content

commons/
lib.rs

1//! # Commons
2//!
3//! Shared Rust utilities and common patterns for the Sebastien Rousseau ecosystem.
4//!
5//! This crate provides reusable components, traits, and utilities used across
6//! multiple Rust projects in the ecosystem.
7//!
8//! ## Features
9//!
10//! - `config` - Configuration file loading and management (TOML)
11//! - `error` - Common error types and Result aliases
12//! - `logging` - Simple structured logging
13//! - `time` - Date/time utilities and formatting
14//! - `collections` - Extended collection utilities (LRU cache)
15//! - `validation` - Input validation utilities
16//! - `retry` - Retry logic with backoff strategies
17//! - `id` - ID generation (timestamp, random, UUID-like)
18//! - `env` - Environment variable helpers
19//! - `fs` - Cross-platform filesystem utilities
20//!
21//! ## Quick Start
22//!
23//! ```rust
24//! use commons::prelude::*;
25//!
26//! // Use the LRU cache
27//! let mut cache = LruCache::new(100);
28//! cache.insert("key", "value");
29//! ```
30//!
31//! ## Feature Flags
32//!
33//! Enable only what you need:
34//!
35//! ```toml
36//! [dependencies]
37//! commons = { version = "0.0.2", default-features = false, features = ["error", "time"] }
38//! ```
39
40#![cfg_attr(docsrs, feature(doc_cfg))]
41#![deny(missing_docs)]
42#![deny(unsafe_code)]
43#![warn(clippy::all)]
44
45#[cfg(feature = "config")]
46#[cfg_attr(docsrs, doc(cfg(feature = "config")))]
47pub mod config;
48
49#[cfg(feature = "error")]
50#[cfg_attr(docsrs, doc(cfg(feature = "error")))]
51pub mod error;
52
53#[cfg(feature = "logging")]
54#[cfg_attr(docsrs, doc(cfg(feature = "logging")))]
55pub mod logging;
56
57#[cfg(feature = "time")]
58#[cfg_attr(docsrs, doc(cfg(feature = "time")))]
59pub mod time;
60
61#[cfg(feature = "collections")]
62#[cfg_attr(docsrs, doc(cfg(feature = "collections")))]
63pub mod collections;
64
65#[cfg(feature = "validation")]
66#[cfg_attr(docsrs, doc(cfg(feature = "validation")))]
67pub mod validation;
68
69#[cfg(feature = "retry")]
70#[cfg_attr(docsrs, doc(cfg(feature = "retry")))]
71pub mod retry;
72
73#[cfg(feature = "id")]
74#[cfg_attr(docsrs, doc(cfg(feature = "id")))]
75pub mod id;
76
77#[cfg(feature = "env")]
78#[cfg_attr(docsrs, doc(cfg(feature = "env")))]
79pub mod env;
80
81#[cfg(feature = "fs")]
82#[cfg_attr(docsrs, doc(cfg(feature = "fs")))]
83pub mod fs;
84
85/// Prelude module for convenient imports.
86///
87/// Import everything commonly needed:
88///
89/// ```rust
90/// use commons::prelude::*;
91/// ```
92pub mod prelude {
93    #[cfg(feature = "error")]
94    pub use crate::error::{CommonError, CommonResult};
95
96    #[cfg(feature = "config")]
97    pub use crate::config::{Config, ConfigBuilder, ConfigError};
98
99    #[cfg(feature = "logging")]
100    pub use crate::logging::{LogLevel, Logger};
101
102    #[cfg(feature = "time")]
103    pub use crate::time::{format_duration, parse_duration, unix_timestamp, unix_timestamp_millis};
104
105    #[cfg(feature = "collections")]
106    pub use crate::collections::LruCache;
107
108    #[cfg(feature = "validation")]
109    pub use crate::validation::{
110        Validator, is_valid_email, is_valid_url, validate_length, validate_range,
111    };
112
113    #[cfg(feature = "retry")]
114    pub use crate::retry::{BackoffStrategy, RetryConfig, retry};
115
116    #[cfg(feature = "id")]
117    pub use crate::id::{IdFormat, IdGenerator, generate_id, generate_prefixed_id};
118
119    #[cfg(feature = "env")]
120    pub use crate::env::{get_env, get_env_or, is_development, is_production, require_env};
121
122    #[cfg(feature = "fs")]
123    pub use crate::fs::{ensure_dir, from_wsl_path, is_wsl, resolve_path, to_wsl_path};
124}
125
126/// Crate version.
127pub const VERSION: &str = env!("CARGO_PKG_VERSION");
128
129/// Returns the crate version.
130#[must_use]
131pub const fn version() -> &'static str {
132    VERSION
133}
134
135#[cfg(test)]
136mod tests {
137    use super::*;
138
139    #[test]
140    fn test_version() {
141        assert_eq!(version(), "0.0.2");
142    }
143}