From 527b32876823a8c4154fcbeb1146fa7da0e4ade2 Mon Sep 17 00:00:00 2001
From: Sam Scott <sam.scott89@gmail.com>
Date: Mon, 21 Jan 2019 10:54:39 -0500
Subject: Minor fixes:

 - Suppress deprecated warning from error-chain
 - Fix clippy issues
 - Update dependencies
 - Update example to csv 1.0
---
 Cargo.toml              | 22 +++++++++++-----------
 examples/csv_vectors.rs | 29 ++++++++++++++++++++---------
 src/de/mod.rs           |  4 ++--
 src/de/parse.rs         |  6 +++---
 src/error.rs            |  2 ++
 src/lib.rs              |  2 --
 src/ser.rs              |  2 +-
 7 files changed, 39 insertions(+), 28 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index 8ea1c37..fcba573 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -16,19 +16,19 @@ version = "0.4.1"
 repository = "samscott89/serde_qs"
 
 [dependencies]
-data-encoding = "2.0"
-error-chain = "0.11.0"
-dtoa = "0.4.0"
-fnv = "1.0.3"
-itoa = "0.3.0"
-percent-encoding = "1.0.0"
-serde = "1.0.1"
-serde_derive = "1.0.1"
+data-encoding = "2.1.2"
+error-chain = "0.12.0"
+dtoa = "0.4.3"
+fnv = "1.0.6"
+itoa = "0.4.3"
+percent-encoding = "1.0.1"
+serde = "1.0.85"
+serde_derive = "1.0.85"
 
 [dev-dependencies]
-csv = "0.15"
-rand = "0.4"
-serde_urlencoded = "0.5"
+csv = "1.0.5"
+rand = "0.6.4"
+serde_urlencoded = "0.5.4"
 
 [lib]
 test = false
diff --git a/examples/csv_vectors.rs b/examples/csv_vectors.rs
index 75f7945..7824cdd 100644
--- a/examples/csv_vectors.rs
+++ b/examples/csv_vectors.rs
@@ -4,6 +4,10 @@ extern crate serde;
 extern crate serde_derive;
 extern crate serde_qs as qs;
 
+use serde::de::DeserializeOwned;
+
+use std::default::Default;
+
 #[derive(Debug, Deserialize, Serialize)]
 struct Query {
     #[serde(deserialize_with="from_csv")]
@@ -18,17 +22,24 @@ fn main() {
 }
 
 
-fn from_csv<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
+fn from_csv<'de, D, T>(deserializer: D) -> Result<Vec<T>, D::Error>
     where D: serde::Deserializer<'de>,
+          T: DeserializeOwned
 {
-    deserializer.deserialize_str(CSVVecVisitor)
+    deserializer.deserialize_str(CSVVecVisitor::<T>::default())
 }
 
 /// Visits a string value of the form "v1,v2,v3" into a vector of bytes Vec<u8>
-struct CSVVecVisitor;
+struct CSVVecVisitor<T: DeserializeOwned>(std::marker::PhantomData<T>);
+
+impl<T: DeserializeOwned> Default for CSVVecVisitor<T> {
+    fn default() -> Self {
+        CSVVecVisitor(std::marker::PhantomData)
+    }
+}
 
-impl<'de> serde::de::Visitor<'de> for CSVVecVisitor {
-    type Value = Vec<u8>;
+impl<'de, T: DeserializeOwned> serde::de::Visitor<'de> for CSVVecVisitor<T> {
+    type Value = Vec<T>;
 
     fn expecting(&self,
                  formatter: &mut std::fmt::Formatter)
@@ -40,10 +51,10 @@ impl<'de> serde::de::Visitor<'de> for CSVVecVisitor {
         where E: serde::de::Error,
     {
         let mut output = Vec::new();
-        let mut items = csv::Reader::from_string(s);
-        // let items = items.next_str();
-        while let csv::NextField::Data(item) = items.next_str() {
-            output.push(u8::from_str_radix(item, 10).unwrap());
+        let mut items = csv::Reader::from_reader(s.as_bytes());
+        for res in items.deserialize() {
+            let item: T = res.map_err(|e| E::custom(format!("could not deserialize sequence value: {:?}", e)))?;
+            output.push(item);
         }
 
         Ok(output)
diff --git a/src/de/mod.rs b/src/de/mod.rs
index 5d8115a..c44ae19 100644
--- a/src/de/mod.rs
+++ b/src/de/mod.rs
@@ -101,8 +101,8 @@ impl Config {
     /// Create a new `Config` with the specified `max_depth` and `strict` mode.
     pub fn new(max_depth: usize, strict: bool) -> Self {
         Self {
-            max_depth: max_depth,
-            strict: strict,
+            max_depth,
+            strict,
         }
     }
 
diff --git a/src/de/parse.rs b/src/de/parse.rs
index a99e96d..09552fe 100644
--- a/src/de/parse.rs
+++ b/src/de/parse.rs
@@ -211,8 +211,8 @@ impl<'a> Parser<'a> {
             acc: (0, 0),
             index: 0,
             peeked: None,
-            depth: depth,
-            strict: strict,
+            depth,
+            strict,
             state: ParsingState::Init,
         }
     }
@@ -248,7 +248,7 @@ impl<'a> Parser<'a> {
             _ => BTreeMap::default().into_iter(),
         };
         Ok(QsDeserializer {
-            iter: iter,
+            iter,
             value: None,
         })
     }
diff --git a/src/error.rs b/src/error.rs
index aecc2d0..596f0a7 100644
--- a/src/error.rs
+++ b/src/error.rs
@@ -1,3 +1,5 @@
+#![allow(deprecated)]
+
 use data_encoding;
 use serde::de;
 
diff --git a/src/lib.rs b/src/lib.rs
index 2da9b2a..ed6fea4 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -89,8 +89,6 @@
     overflowing_literals,
     path_statements,
     plugin_as_library,
-    private_no_mangle_fns,
-    private_no_mangle_statics,
     stable_features,
     trivial_casts,
     trivial_numeric_casts,
diff --git a/src/ser.rs b/src/ser.rs
index 4206e60..13796ce 100644
--- a/src/ser.rs
+++ b/src/ser.rs
@@ -93,7 +93,7 @@ pub fn to_string<T: ser::Serialize>(input: &T) -> Result<String> {
 pub fn to_writer<T: ser::Serialize, W: Write>(input: &T, writer: &mut W) -> Result<()> {
     let mut first = true;
     input.serialize(&mut QsSerializer {
-            writer: writer,
+            writer,
             key: None,
             first: &mut first,
         })
-- 
cgit v1.2.3