diff --git a/src/datetime/mod.rs b/src/datetime/mod.rs index bf9c16ad5d..76276ed2fd 100644 --- a/src/datetime/mod.rs +++ b/src/datetime/mod.rs @@ -22,8 +22,9 @@ use std::time::{SystemTime, UNIX_EPOCH}; use crate::format::DelayedFormat; #[cfg(feature = "unstable-locales")] use crate::format::Locale; -use crate::format::{parse, parse_and_remainder, ParseError, ParseResult, Parsed, StrftimeItems}; +use crate::format::{parse, parse_and_remainder, parse_rfc3339}; use crate::format::{Fixed, Item}; +use crate::format::{ParseError, ParseResult, Parsed, StrftimeItems}; use crate::naive::{Days, IsoWeek, NaiveDate, NaiveDateTime, NaiveTime}; #[cfg(feature = "clock")] use crate::offset::Local; @@ -631,9 +632,8 @@ impl DateTime { /// also simultaneously valid RFC 3339 values, but not all RFC 3339 values are valid ISO 8601 /// values (or the other way around). pub fn parse_from_rfc3339(s: &str) -> ParseResult> { - const ITEMS: &[Item<'static>] = &[Item::Fixed(Fixed::RFC3339)]; let mut parsed = Parsed::new(); - parse(&mut parsed, s, ITEMS.iter())?; + parse_rfc3339(&mut parsed, s)?; parsed.to_datetime() } diff --git a/src/format/mod.rs b/src/format/mod.rs index 7c9c3b7dd0..bc83d29d03 100644 --- a/src/format/mod.rs +++ b/src/format/mod.rs @@ -56,6 +56,7 @@ use crate::{Month, ParseMonthError, ParseWeekdayError, Weekday}; #[cfg(feature = "unstable-locales")] pub(crate) mod locales; +pub(crate) use parse::parse_rfc3339; pub use parse::{parse, parse_and_remainder}; pub use parsed::Parsed; /// L10n locales. diff --git a/src/format/parse.rs b/src/format/parse.rs index c5d35f4c4e..2ccd4166d0 100644 --- a/src/format/parse.rs +++ b/src/format/parse.rs @@ -157,7 +157,7 @@ fn parse_rfc2822<'a>(parsed: &mut Parsed, mut s: &'a str) -> ParseResult<(&'a st Ok((s, ())) } -fn parse_rfc3339<'a>(parsed: &mut Parsed, mut s: &'a str) -> ParseResult<(&'a str, ())> { +pub(crate) fn parse_rfc3339<'a>(parsed: &mut Parsed, mut s: &'a str) -> ParseResult<(&'a str, ())> { macro_rules! try_consume { ($e:expr) => {{ let (s_, v) = $e?;