From 626a46ff7cd345e1069d7f5b1c5b3c9411333588 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Thu, 25 Jun 2020 13:44:51 +0800 Subject: [PATCH] add try_from/try_into --- src/lib.rs | 9 +++++++++ tests/lib_test.rs | 11 ++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 550a4b9..5cee2db 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,7 @@ #[macro_use] extern crate quick_error; use chrono::prelude::*; use std::{ + convert::TryFrom, time::Duration, str::Chars, iter::Peekable, @@ -181,6 +182,14 @@ pub fn fmt(f: &str) -> Result { Ok(SimpleDateFormat{ parts }) } +impl TryFrom<&str> for SimpleDateFormat { + type Error = ParseError; + + fn try_from(s: &str) -> Result { + SimpleDateFormat::new(s) + } +} + fn format_zone(date_time: &DateTime, _cnt: usize) -> String where Tz: TimeZone { format!("{:?}", date_time.offset()) } diff --git a/tests/lib_test.rs b/tests/lib_test.rs index a2b3759..9735f59 100644 --- a/tests/lib_test.rs +++ b/tests/lib_test.rs @@ -1,4 +1,4 @@ -use simpledateformat::{ fmt, format_human, }; +use simpledateformat::{ SimpleDateFormat, fmt, format_human, }; use chrono::prelude::*; use std::time::Duration; @@ -35,3 +35,12 @@ fn test_format_human() { assert_eq!("2days", format_human(Duration::from_secs(2 * 24 * 60 * 60))); assert_eq!("2days 0hour 0min 1s", format_human(Duration::from_secs(2 * 24 * 60 * 60 + 1))); } + +#[test] +fn test_try_from() { + use std::convert::TryInto; + let t = Utc.timestamp_millis(0); + let fmt = "yyyy/MM/dd HH:mm:ss.SSS z"; + let sdf: Result = fmt.try_into(); + assert_eq!("1970/01/01 00:00:00.000 Z", sdf.unwrap().format(&t)); +}