From 146aee3e1eb1db5d917a23dbdf90e68b2a20c369 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Thu, 22 Dec 2016 09:48:31 +0100 Subject: [PATCH] Slightly improve Url serde impls --- Cargo.toml | 2 +- src/lib.rs | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 5ac4c7c6..4ae9905c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "url" -version = "1.2.4" +version = "1.2.5" authors = ["The rust-url developers"] description = "URL library for Rust, based on the WHATWG URL Standard" diff --git a/src/lib.rs b/src/lib.rs index 9f273cbb..33be0da1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -126,6 +126,7 @@ use parser::{Parser, Context, SchemeType, to_u32}; use percent_encoding::{PATH_SEGMENT_ENCODE_SET, USERINFO_ENCODE_SET, percent_encode, percent_decode, utf8_percent_encode}; use std::cmp; +use std::error::Error; use std::fmt::{self, Write}; use std::hash; use std::io; @@ -1508,7 +1509,7 @@ impl rustc_serialize::Decodable for Url { #[cfg(feature="serde")] impl serde::Serialize for Url { fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> where S: serde::Serializer { - format!("{}", self).serialize(serializer) + serializer.serialize_str(self.as_str()) } } @@ -1519,7 +1520,9 @@ impl serde::Serialize for Url { impl serde::Deserialize for Url { fn deserialize(deserializer: &mut D) -> Result where D: serde::Deserializer { let string_representation: String = try!(serde::Deserialize::deserialize(deserializer)); - Ok(Url::parse(&string_representation).unwrap()) + Url::parse(&string_representation).map_err(|err| { + serde::Error::invalid_value(err.description()) + }) } }