winnow_rfc3339

Crates.iowinnow_rfc3339
lib.rswinnow_rfc3339
version0.3.0
created_at2025-01-22 01:12:29.295606+00
updated_at2025-05-30 22:24:48.905306+00
descriptionParsing RFC 3339 dates using winnow
homepage
repositoryhttps://github.com/soulstompp/winnow-datetime
max_upload_size
id1526071
size46,010
Kenny Flegal (soulstompp)

documentation

https://docs.rs/winnow-rfc3339/

README

winnow-rfc3339, making parsing RFC3339 dates a breeze

crates.io docs.rs docs

About

This library contains parsers for parsing RFC3339 dates and their various components built off the winnow-datetime parsers

Parsing

Complete

If you have all the data you need, you can just pass along the input directly.

let datetime = opt(datetime)
    .parse_next(&mut "2015-06-26 16:43:23+0200"));

// the above will give you:
Some(DateTime {
    date: Date::YMD {
        year: 2015,
        month: 6,
        day: 26,
    },
    time: Time {
        hour: 16,
        minute: 43,
        second: 23,
        tz_offset_hours: 2,
        tz_offset_minutes: 0,
    },
});

Partial

For partial data the only difference is wrapping input in Partial and handling incomplete errors correctly, which is documented in winnow partial docs.

pub type Stream<'i> = Partial<&'i [u8]>;

let datetime = opt(datetime)
    .parse_next(&mut Stream::new("2015-06-26 16:43:23+0200").as_bytes()));

// the above will give you:
Some(DateTime {
    date: Date::YMD {
        year: 2015,
        month: 6,
        day: 26,
    },
    time: Time {
        hour: 16,
        minute: 43,
        second: 23,
        tz_offset_hours: 2,
        tz_offset_minutes: 0,
    },
});

Contributors

winnow-rfc3339 is the fruit of the work of many contributors over the years, many thanks for your help!

Documentation

Documentation is online.

License

MIT Licensed. See LICENSE

Commit count: 258

cargo fmt