duration-extender
A lightweight, zero-dependency Rust crate that extends primitive integer types with intuitive methods for creating std::time::Duration objects.
Write expressive, human-readable code for timeouts, delays, and schedules without the verbosity of Duration::from_secs().
Why duration-extender?
Before:
let timeout = from_secs;
let delay = from_secs;
let cache_ttl = from_secs;
After:
let timeout = 30.seconds;
let delay = 5.minutes;
let cache_ttl = 1.days;
Features
- Fluent API — Natural, readable syntax for duration creation
- Type-safe — Works with
u64,u32,i64, andi32 - Zero panics — Uses saturating arithmetic and absolute values for signed integers
- Zero dependencies — Just the standard library
- Minimal overhead — Compiles down to the same code as manual duration creation
Installation
Add this to your Cargo.toml:
[]
= "0.1"
Usage
Import the DurationExt trait to unlock duration methods on integers:
use DurationExt;
use Duration;
Real-World Examples
HTTP client timeout:
let client = builder
.timeout
.build?;
Tokio sleep:
sleep.await;
Cache expiration:
cache.insert_with_ttl;
Rate limiting:
let rate_limit = new;
Available Methods
The DurationExt trait provides these methods:
| Method | Equivalent |
|---|---|
.seconds() |
Duration::from_secs(n) |
.minutes() |
Duration::from_secs(n * 60) |
.hours() |
Duration::from_secs(n * 3600) |
.days() |
Duration::from_secs(n * 86400) |
.weeks() |
Duration::from_secs(n * 604800) |
Supported Types
The DurationExt trait is implemented for:
u64andu32— Direct conversioni64andi32— Uses absolute value to prevent negative durations
All operations use saturating arithmetic to prevent overflow panics.
Safety Guarantees
- No panics — Saturating arithmetic ensures overflow-safe operations
- Negative handling — Signed integers automatically convert to positive durations
- Type safety — Leverages Rust's type system for compile-time correctness
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is dual-licensed under:
You may choose either license for your purposes.
Acknowledgments
Inspired by duration extension patterns from other languages and the Rust community's focus on ergonomic APIs.