Module line

Source
Expand description

Parsing zoneinfo data files, line-by-line.

This module provides functions that take a line of input from a zoneinfo data file and attempts to parse it, returning the details of the line if it gets parsed successfully. It classifies them as Rule, Link, Zone, or Continuation lines.

Line is the type that parses and holds zoneinfo line data. To try to parse a string, use the Line::from_str constructor. (This isn’t the FromStr trait, so you can’t use parse on a string. Sorry!)

§Examples

Parsing a Rule line:

use parse_zoneinfo::line::*;

let line = Line::new("Rule  EU  1977    1980    -   Apr Sun>=1   1:00u  1:00    S");

assert_eq!(line, Ok(Line::Rule(Rule {
    name:         "EU",
    from_year:    Year::Number(1977),
    to_year:      Some(Year::Number(1980)),
    month:        Month::April,
    day:          DaySpec::FirstOnOrAfter(Weekday::Sunday, 1),
    time:         TimeSpec::HoursMinutes(1, 0).with_type(TimeType::UTC),
    time_to_add:  TimeSpec::HoursMinutes(1, 0),
    letters:      Some("S"),
})));

Parsing a Zone line:

use parse_zoneinfo::line::*;

let line = Line::new("Zone  Australia/Adelaide  9:30  Aus  AC%sT  1971 Oct 31  2:00:00");

assert_eq!(line, Ok(Line::Zone(Zone {
    name: "Australia/Adelaide",
    info: ZoneInfo {
        utc_offset:  TimeSpec::HoursMinutes(9, 30),
        saving:      Saving::Multiple("Aus"),
        format:      "AC%sT",
        time:        Some(ChangeTime::UntilTime(
                        Year::Number(1971),
                        Month::October,
                        DaySpec::Ordinal(31),
                        TimeSpec::HoursMinutesSeconds(2, 0, 0).with_type(TimeType::Wall))
                     ),
    },
})));

Parsing a Link line:

use parse_zoneinfo::line::*;

let line = Line::new("Link  Europe/Istanbul  Asia/Istanbul");
assert_eq!(line, Ok(Line::Link(Link {
    existing:  "Europe/Istanbul",
    new:       "Asia/Istanbul",
})));

Structs§

Link
Rule
A rule definition line.
TimeSpecAndType
Zone
A zone definition line.
ZoneInfo
The information contained in both zone lines and zone continuation lines.

Enums§

ChangeTime
The time at which the rules change for a location.
DaySpec
A day definition field.
Error
Line
Month
A month field, which is actually just a wrapper around datetime::Month.
Saving
The amount of daylight saving time (DST) to apply to this timespan. This is a special type for a certain field in a zone line, which can hold different types of value.
TimeSpec
A time definition field.
TimeType
Weekday
A weekday field, which is actually just a wrapper around datetime::Weekday.
Year
A year definition field.