armature_cron/
lib.rs

1//! Cron job scheduling for Armature framework.
2//!
3//! Provides a robust cron job scheduler with support for:
4//! - ⏰ Standard cron expressions
5//! - 📛 Named jobs with metadata
6//! - 🚀 Async job execution
7//! - 🪝 Job lifecycle hooks
8//! - ❌ Error handling and retry logic
9//! - 🔒 Job overlap prevention
10//!
11//! ## Quick Start - Cron Expressions
12//!
13//! ```
14//! use armature_cron::CronExpression;
15//!
16//! // Parse a cron expression for "every hour"
17//! let expr = CronExpression::parse("0 0 * * * *").unwrap();
18//!
19//! // Get next execution time
20//! let now = chrono::Utc::now();
21//! let next = expr.next_after(now);
22//!
23//! assert!(next.is_some());
24//! assert!(next.unwrap() > now);
25//! ```
26//!
27//! ## Cron Expression Presets
28//!
29//! ```
30//! use armature_cron::expression::{CronExpression, CronPresets};
31//!
32//! // Use preset expressions
33//! let every_minute = CronExpression::parse(CronPresets::EVERY_MINUTE).unwrap();
34//! let every_hour = CronExpression::parse(CronPresets::EVERY_HOUR).unwrap();
35//! let daily = CronExpression::parse(CronPresets::DAILY).unwrap();
36//!
37//! // Verify they parse correctly
38//! let now = chrono::Utc::now();
39//! assert!(every_minute.next_after(now).unwrap() > now);
40//! assert!(every_hour.next_after(now).unwrap() > now);
41//! assert!(daily.next_after(now).unwrap() > now);
42//! ```
43//!
44//! ## Complete Example
45//!
46//! ```no_run
47//! use armature_cron::*;
48//!
49//! #[tokio::main]
50//! async fn main() -> Result<(), CronError> {
51//!     let mut scheduler = CronScheduler::new();
52//!
53//!     // Schedule a job to run every minute
54//!     scheduler.add_job(
55//!         "cleanup",
56//!         "0 * * * * *",
57//!         |context| Box::pin(async move {
58//!             println!("Running cleanup job");
59//!             Ok(())
60//!         })
61//!     )?;
62//!
63//!     // Start the scheduler
64//!     scheduler.start().await?;
65//!
66//!     Ok(())
67//! }
68//! ```
69
70pub mod error;
71pub mod expression;
72pub mod job;
73pub mod scheduler;
74
75pub use error::{CronError, CronResult};
76pub use expression::CronExpression;
77pub use job::{Job, JobContext, JobFn, JobStatus};
78pub use scheduler::{CronScheduler, SchedulerConfig};
79
80/// Re-export commonly used types
81pub mod prelude {
82    pub use crate::error::{CronError, CronResult};
83    pub use crate::expression::CronExpression;
84    pub use crate::job::{Job, JobContext, JobFn, JobStatus};
85    pub use crate::scheduler::{CronScheduler, SchedulerConfig};
86}