| Crates.io | durstr |
| lib.rs | durstr |
| version | 0.4.0 |
| created_at | 2025-08-14 17:00:59.228794+00 |
| updated_at | 2025-08-27 00:15:33.761652+00 |
| description | A simple library for parsing human-readable strings into durations. |
| homepage | |
| repository | https://github.com/iksuddle/durstr |
| max_upload_size | |
| id | 1795103 |
| size | 19,730 |
durstrA simple library for parsing human-readable duration strings into std::time::Duration.
Add durstr to Cargo.toml:
[dependencies]
durstr = "0.4.0"
This library provides a parse function for quick and easy parsing, and a Parser struct for more control over parsing behavior.
The parse function is a convenience wrapper around a default Parser.
use durstr::parse;
use std::time::Duration;
let dur = parse("12 minutes, 21 seconds");
assert_eq!(dur, Ok(Duration::from_secs(741)));
let dur = parse("1hr 2min 3sec");
assert_eq!(dur, Ok(Duration::from_secs(3723)));
For more control, you can use the Parser struct directly. For example, to parse with case-insensitivity:
use durstr::{Parser, ParserOptions};
use std::time::Duration;
let parser = Parser::new(ParserOptions { ignore_case: true, ..Default::default() });
let dur = parser.parse("1 MINUTE, 2 SECONDS");
assert_eq!(dur, Ok(Duration::from_secs(62)));
By default, the following units are provided:
| Unit | Aliases |
|---|---|
| Millisecond | ms, msec(s), millisecond(s) |
| Second | s, sec(s), second(s) |
| Minute | m, min(s), minute(s) |
| Hour | h, hr(s), hour(s) |
You can define your own units, and their values, using the ParserUnits struct:
use durstr::{Parser, ParserOptions, ParserUnits};
use std::time::Duration;
let mut units = ParserUnits::default();
units.add_unit("days", Duration::from_secs(3600) * 24);
let parser = Parser::new(ParserOptions {
units,
..Default::default()
});
let d = parser.parse("4 days");
assert_eq!(d, Ok(Duration::from_secs(3600) * 24 * 4));