reinhardt_utils/lib.rs
1//! # Reinhardt Utils
2//!
3//! Utility functions for Reinhardt framework, inspired by Django's utils module.
4//!
5//! ## Modules
6//!
7//! - `timezone`: Timezone-aware datetime handling
8//! - `dateformat`: Date and time formatting utilities
9//! - `html`: HTML escaping and manipulation
10//! - `encoding`: Text encoding and URL encoding
11//! - `text`: Text manipulation utilities
12//! - `humanize`: Human-friendly formatting utilities
13//! - `logging`: Logging utilities (feature: `logging`)
14//! - `cache`: Caching utilities (feature: `cache`)
15//! - `storage`: Storage utilities (feature: `storage`)
16//! - `staticfiles`: Static file serving utilities (feature: `staticfiles`)
17//!
18//! ## Example
19//!
20//! ```rust
21//! use reinhardt_utils::{timezone, dateformat, html, encoding, text};
22//!
23//! // Timezone
24//! let now = timezone::now();
25//! let formatted = dateformat::format(&now, "Y-m-d H:i:s");
26//!
27//! // HTML
28//! let escaped = html::escape("<script>alert('XSS')</script>");
29//!
30//! // Encoding
31//! let slug = encoding::slugify("Hello World");
32//!
33//! // Text
34//! let ordinal = text::ordinal(1); // "1st"
35//! ```
36
37pub mod cache;
38pub mod logging;
39pub mod staticfiles;
40pub mod storage;
41pub mod utils_core;
42
43// Core modules
44pub mod humanize;
45
46// Re-export utils-core modules
47pub use crate::utils_core::{dateformat, encoding, html, text, timezone};
48
49pub use crate::utils_core::input_validation::{
50 IdentifierError, sanitize_log_input, validate_identifier, validate_redirect_url,
51};
52pub use crate::utils_core::lock_recovery::{
53 LockRecoveryError, recover_mutex, recover_rwlock_read, recover_rwlock_write,
54};
55pub use crate::utils_core::path_safety::{
56 PathTraversalError, is_safe_filename_component, safe_path_join,
57};
58pub use dateformat::format as format_date;
59pub use encoding::{escapejs, slugify, truncate_chars, truncate_words, urldecode, urlencode};
60pub use html::{SafeString, escape, escape_attr, strip_tags, unescape};
61pub use text::{capfirst, floatcomma, intcomma, ordinal, pluralize, title};
62pub use timezone::{
63 get_timezone_name_local, get_timezone_name_utc, localtime, now, to_local, to_utc,
64};