firq_core/lib.rs
1//! Core scheduling primitives for Firq.
2//!
3//! `firq-core` is runtime-agnostic and contains the scheduling engine used by
4//! the async and web integration crates.
5//!
6//! It provides:
7//! - Deficit Round Robin (DRR) fairness by tenant
8//! - Global/per-tenant backpressure policies
9//! - Deadline-aware dequeue semantics
10//! - Queue-time metrics and saturation signals
11//! - Prometheus text rendering helpers (`metrics` feature, enabled by default)
12//! - Pending task cancellation and shutdown modes
13//!
14//! # Basic usage
15//!
16//! ```rust
17//! use firq_core::{EnqueueResult, Priority, Scheduler, SchedulerConfig, Task, TenantKey};
18//! use std::time::Instant;
19//!
20//! let scheduler = Scheduler::new(SchedulerConfig::default());
21//! let tenant = TenantKey::from(1);
22//! let task = Task {
23//! payload: "work",
24//! enqueue_ts: Instant::now(),
25//! deadline: None,
26//! priority: Priority::Normal,
27//! cost: 1,
28//! };
29//!
30//! match scheduler.enqueue(tenant, task) {
31//! EnqueueResult::Enqueued => {}
32//! EnqueueResult::Rejected(_) => {}
33//! EnqueueResult::Closed => {}
34//! }
35//! ```
36
37mod api;
38#[cfg(feature = "metrics")]
39pub mod prometheus;
40mod scheduler;
41mod state;
42
43pub use api::{
44 BackpressurePolicy, CancelResult, CloseMode, DequeueResult, EnqueueRejectReason, EnqueueResult,
45 EnqueueWithHandleResult, Priority, QueueTimeBucket, SchedulerConfig, SchedulerStats, Task,
46 TaskHandle, TenantCount, TenantKey,
47};
48pub use scheduler::Scheduler;
49
50#[cfg(test)]
51mod tests;