summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.toml22
-rw-r--r--examples/csv_vectors.rs29
-rw-r--r--src/de/mod.rs4
-rw-r--r--src/de/parse.rs6
-rw-r--r--src/error.rs2
-rw-r--r--src/lib.rs2
-rw-r--r--src/ser.rs2
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,
})