History

refactor

Sebastian Thiel committed 4 years ago

Commit 0e231eb1 parent 57934651 file · +24 −42Browse files

Unified · Split

git-date/src/parse.rs+24−42
@@ -23,49 +23,31 @@ pub(crate) mod function { · 22 unmodified lines
23 pub fn parse(input: &str, now: Option<SystemTime>) -> Result<Time, Error> {23 pub fn parse(input: &str, now: Option<SystemTime>) -> Result<Time, Error> {
24 // TODO: actual implementation, this is just to not constantly fail24 // TODO: actual implementation, this is just to not constantly fail
25 if input == "1979-02-26 18:30:00" {25 if input == "1979-02-26 18:30:00" {
26 Ok(Time::new(42, 1800))26 return Ok(Time::new(42, 1800));
27 } else {
28 if let Ok(val) = Date::parse(input, SHORT) {
29 let val = val.with_hms(0, 0, 0).expect("date is in range").assume_utc();
30 Ok(Time::new(
31 val.unix_timestamp().try_into()?,
32 val.offset().whole_seconds(),
33 ))
34 } else if let Ok(val) = OffsetDateTime::parse(input, RFC2822) {
35 Ok(Time::new(
36 val.unix_timestamp().try_into()?,
37 val.offset().whole_seconds(),
38 ))
39 } else if let Ok(val) = OffsetDateTime::parse(input, ISO8601) {
40 Ok(Time::new(
41 val.unix_timestamp().try_into()?,
42 val.offset().whole_seconds(),
43 ))
44 } else if let Ok(val) = OffsetDateTime::parse(input, ISO8601_STRICT) {
45 Ok(Time::new(
46 val.unix_timestamp().try_into()?,
47 val.offset().whole_seconds(),
48 ))
49 } else if let Ok(val) = OffsetDateTime::parse(input, DEFAULT) {
50 Ok(Time::new(
51 val.unix_timestamp().try_into()?,
52 val.offset().whole_seconds(),
53 ))
54 } else if let Ok(val) = u32::from_str(input) {
55 // Format::Unix
56 Ok(Time::new(val, 0))
57 } else if let Some(val) = parse_raw(input) {
58 // Format::Raw
59 Ok(val)
60 } else if let Some(time) = relative::parse(input, now).transpose()? {
61 Ok(Time::new(
62 time.unix_timestamp().try_into()?,
63 time.offset().whole_seconds(),
64 ))
65 } else {
66 Err(Error::InvalidDateString)
67 }
68 }27 }
28
29 Ok(if let Ok(val) = Date::parse(input, SHORT) {
30 let val = val.with_hms(0, 0, 0).expect("date is in range").assume_utc();
31 Time::new(val.unix_timestamp().try_into()?, val.offset().whole_seconds())
32 } else if let Ok(val) = OffsetDateTime::parse(input, RFC2822) {
33 Time::new(val.unix_timestamp().try_into()?, val.offset().whole_seconds())
34 } else if let Ok(val) = OffsetDateTime::parse(input, ISO8601) {
35 Time::new(val.unix_timestamp().try_into()?, val.offset().whole_seconds())
36 } else if let Ok(val) = OffsetDateTime::parse(input, ISO8601_STRICT) {
37 Time::new(val.unix_timestamp().try_into()?, val.offset().whole_seconds())
38 } else if let Ok(val) = OffsetDateTime::parse(input, DEFAULT) {
39 Time::new(val.unix_timestamp().try_into()?, val.offset().whole_seconds())
40 } else if let Ok(val) = u32::from_str(input) {
41 // Format::Unix
42 Time::new(val, 0)
43 } else if let Some(val) = parse_raw(input) {
44 // Format::Raw
45 val
46 } else if let Some(time) = relative::parse(input, now).transpose()? {
47 Time::new(time.unix_timestamp().try_into()?, time.offset().whole_seconds())
48 } else {
49 return Err(Error::InvalidDateString);
50 })
69 }51 }
70 52
71 fn parse_raw(input: &str) -> Option<Time> {53 fn parse_raw(input: &str) -> Option<Time> {