From 4e246b2142cae371ca4d972f94472f88f9c6b1ce Mon Sep 17 00:00:00 2001 From: Alan Du Date: Thu, 1 Jun 2017 20:35:39 +0100 Subject: [PATCH] Truncate fractional seconds to picoseconds Close https://github.com/alexcrichton/toml-rs/issues/186 --- src/datetime.rs | 5 ++++- tests/valid.rs | 3 +++ tests/valid/datetime-truncate.json | 6 ++++++ tests/valid/datetime-truncate.toml | 1 + 4 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 tests/valid/datetime-truncate.json create mode 100644 tests/valid/datetime-truncate.toml diff --git a/src/datetime.rs b/src/datetime.rs index f39d9fa..810a4d7 100644 --- a/src/datetime.rs +++ b/src/datetime.rs @@ -218,7 +218,10 @@ impl FromStr for Datetime { return Err(DatetimeParseError { _private: () }) } chars = whole[end..].chars(); - match format!("0.{}", &whole[..end]).parse() { + + // truncate to picoseconds precision + let last = if end > 12 { 12 } else { end }; + match format!("0.{}", &whole[..last]).parse() { Ok(f) => f, Err(_) => return Err(DatetimeParseError { _private: () }), } diff --git a/tests/valid.rs b/tests/valid.rs index 676fc67..b3cc096 100644 --- a/tests/valid.rs +++ b/tests/valid.rs @@ -190,6 +190,9 @@ test!(example_bom, include_str!("valid/example-bom.toml"), include_str!("valid/example.json")); +test!(datetime_truncate, + include_str!("valid/datetime-truncate.toml"), + include_str!("valid/datetime-truncate.json")); test!(table_array_nest_no_keys, include_str!("valid/table-array-nest-no-keys.toml"), include_str!("valid/table-array-nest-no-keys.json")); diff --git a/tests/valid/datetime-truncate.json b/tests/valid/datetime-truncate.json new file mode 100644 index 0000000..34a432f --- /dev/null +++ b/tests/valid/datetime-truncate.json @@ -0,0 +1,6 @@ +{ + "bestdayever": { + "type": "datetime", + "value": "1987-07-05T17:45:00.123456789012Z" + } +} diff --git a/tests/valid/datetime-truncate.toml b/tests/valid/datetime-truncate.toml new file mode 100644 index 0000000..05de841 --- /dev/null +++ b/tests/valid/datetime-truncate.toml @@ -0,0 +1 @@ +bestdayever = 1987-07-05T17:45:00.123456789012345Z