winnow_datetime 0.3.0

Parsing dates using winnow
Documentation
#[macro_export]
macro_rules! duration_part_seq {
    ({
        whole: $whole_parser:expr,
        sep: $sep_parser:expr,
        fraction: $fraction_parser:expr,
        end: $end_parser:expr
    }) => {
        move |input: &mut _| {
            seq!((
                $whole_parser,
                opt(preceded($sep_parser, $fraction_parser.map(|n| {
                   winnow_datetime::util::digits_to_fractional_f32(n)
                }
                ))),
                _ : $end_parser
            ))
            .map(move |(whole, frac)| DurationPart{ whole, frac })
            .parse_next(input)
        }
    };
}

#[macro_export]
macro_rules! date_yddd_seq {
    (
    $date_type: ident::$variant:ident {
        year: $year_parser:expr,
        day: $day_parser:expr,
    }) => {
        move |input: &mut _| {
            seq!($date_type::$variant {
                year: $year_parser,
                day: $day_parser,
            })
            .parse_next(input)
        }
    };
}

#[macro_export]
macro_rules! date_ymd_seq {
    (
    $date_type: ident::$variant:ident {
        year: $year_parser:expr,
        month: $month_parser:expr,
        day: $day_parser:expr,
    }) => {
        seq!($date_type::$variant {
            year: $year_parser,
            month: $month_parser,
            day: $day_parser,
        })
    };
}

#[macro_export]
macro_rules! date_ywd_seq {
    (
    $date_type: ident::$variant:ident {
        year: $year_parser:expr,
        week: $week_parser:expr,
        day: $day_parser:expr,
    }) => {
        seq!($date_type::$variant {
            year: $year_parser,
            week: $week_parser,
            day: $day_parser,
        })
    };
}

#[macro_export]
macro_rules! time_seq {
    (
    $variant:ident {
        hour: $hour_parser:expr,
        minute: $minute_parser:expr,
        second: $second_parser:expr,
        millisecond: $millisecond_parser:expr,
        offset: $offset_parser:expr,
        time_zone: $time_zone_parser:expr,
        calendar: $calendar_parser:expr,
    }) => {
        seq!($variant {
            hour: $hour_parser,
            minute: $minute_parser,
            second: $second_parser,
            millisecond: $millisecond_parser,
            offset: $offset_parser,
            time_zone: $time_zone_parser,
            calendar: $calendar_parser,
        })
    };
}

#[macro_export]
macro_rules! partial_time_seq {
    (
    $variant:ident {
        hour: $hour_parser:expr,
        minute: $minute_parser:expr,
        second: $second_parser:expr,
        millisecond: $millisecond_parser:expr,
        offset: $offset_parser:expr,
    }) => {
        seq!($variant {
            hour: $hour_parser,
            minute: $minute_parser,
            second: $second_parser,
            millisecond: $millisecond_parser,
            offset: $offset_parser,
        })
    };
}