aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Huss <eric@huss.org>2019-02-19 10:59:42 -0800
committerEric Huss <eric@huss.org>2019-02-19 10:59:42 -0800
commit8fce90e9cd4be4cbb12b66fedb2de72a73214f15 (patch)
tree1b45f9ae88c873e581013cc6d199d13d0b70e057
parent56f9afb4d2abdf38ed3caf9f819ac8bacc290940 (diff)
downloadmilf-rs-8fce90e9cd4be4cbb12b66fedb2de72a73214f15.tar.gz
milf-rs-8fce90e9cd4be4cbb12b66fedb2de72a73214f15.zip
Fix case sensitivity with T, Z, and E.
-rw-r--r--src/datetime.rs5
-rw-r--r--src/de.rs5
-rw-r--r--test-suite/tests/datetime.rs2
-rw-r--r--test-suite/tests/parser.rs1
4 files changed, 10 insertions, 3 deletions
diff --git a/src/datetime.rs b/src/datetime.rs
index 363160b..9239593 100644
--- a/src/datetime.rs
+++ b/src/datetime.rs
@@ -173,8 +173,9 @@ impl FromStr for Datetime {
};
// Next parse the "partial-time" if available
+ let next = chars.clone().next();
let partial_time = if full_date.is_some()
- && (chars.clone().next() == Some('T') || chars.clone().next() == Some(' '))
+ && (next == Some('T') || next == Some('t') || next == Some(' '))
{
chars.next();
true
@@ -253,7 +254,7 @@ impl FromStr for Datetime {
// And finally, parse the offset
let offset = if offset_allowed {
let next = chars.clone().next();
- if next == Some('Z') {
+ if next == Some('Z') || next == Some('z') {
chars.next();
Some(Offset::Z)
} else if next.is_none() {
diff --git a/src/de.rs b/src/de.rs
index 85aef61..437ead5 100644
--- a/src/de.rs
+++ b/src/de.rs
@@ -1169,7 +1169,10 @@ impl<'a> Deserializer<'a> {
}
fn number_or_date(&mut self, span: Span, s: &'a str) -> Result<Value<'a>, Error> {
- if s.contains('T') || (s.len() > 1 && s[1..].contains('-')) && !s.contains("e-") {
+ if s.contains('T')
+ || s.contains('t')
+ || (s.len() > 1 && s[1..].contains('-') && !s.contains("e-") && !s.contains("E-"))
+ {
self.datetime(span, s, false)
.map(|(Span { start, end }, d)| Value {
e: E::Datetime(d),
diff --git a/test-suite/tests/datetime.rs b/test-suite/tests/datetime.rs
index a0064fb..d6128b0 100644
--- a/test-suite/tests/datetime.rs
+++ b/test-suite/tests/datetime.rs
@@ -14,6 +14,8 @@ fn times() {
fn good(s: &str) {
dogood(s, s);
dogood(&s.replace("T", " "), s);
+ dogood(&s.replace("T", "t"), s);
+ dogood(&s.replace("Z", "z"), s);
}
good("1997-09-09T09:09:09Z");
diff --git a/test-suite/tests/parser.rs b/test-suite/tests/parser.rs
index 2534ce6..69b491d 100644
--- a/test-suite/tests/parser.rs
+++ b/test-suite/tests/parser.rs
@@ -227,6 +227,7 @@ fn floats() {
t!("1.0e0", 1.0);
t!("1.0e+0", 1.0);
t!("1.0e-0", 1.0);
+ t!("1E-0", 1.0);
t!("1.001e-0", 1.001);
t!("2e10", 2e10);
t!("2e+10", 2e10);