durstr

Crates.iodurstr
lib.rsdurstr
version0.4.0
created_at2025-08-14 17:00:59.228794+00
updated_at2025-08-27 00:15:33.761652+00
descriptionA simple library for parsing human-readable strings into durations.
homepage
repositoryhttps://github.com/iksuddle/durstr
max_upload_size
id1795103
size19,730
(iksuddle)

documentation

README

durstr

Crates.io Version docs.rs

A simple library for parsing human-readable duration strings into std::time::Duration.

Usage

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)));

Units

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));
Commit count: 37

cargo fmt