Skip to content

Commit 94ce240

Browse files
committed
Merge master into 0.8.x
2 parents 0ab0e6f + 3ae9926 commit 94ce240

File tree

2 files changed

+27
-25
lines changed

2 files changed

+27
-25
lines changed

Diff for: src/lib.rs

+4-7
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,11 @@
4343
//! * `serde` - adds the ability to serialize and deserialize a UUID using the
4444
//! `serde` crate.
4545
//!
46-
//! You need to enable one of the following Cargo features together with
47-
//! `v3`, `v4` or `v5` feature if you're targeting `wasm32-unknown-unknown`
48-
//! target:
46+
//! For WebAssembly, enable one of the following features depending
47+
//! on your JavaScript interop toolchain of choice:
4948
//!
50-
//! * `stdweb` - enables support for `OsRng` on `wasm32-unknown-unknown` via
51-
//! [`stdweb`] combined with [`cargo-web`]
52-
//! * `wasm-bindgen` - enables support for `OsRng` on `wasm32-unknown-unknown`
53-
//! via [`wasm-bindgen`]
49+
//! * `stdweb` - for [`stdweb`] combined with [`cargo-web`]
50+
//! * `wasm-bindgen` - for [`wasm-bindgen`]
5451
//!
5552
//! By default, `uuid` can be depended on with:
5653
//!

Diff for: src/serde_support.rs

+23-18
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ use crate::prelude::*;
1313
use core::fmt;
1414
use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
1515

16-
#[cfg(feature = "serde")]
1716
impl Serialize for Uuid {
1817
fn serialize<S: Serializer>(
1918
&self,
@@ -28,11 +27,14 @@ impl Serialize for Uuid {
2827
}
2928
}
3029

31-
#[cfg(feature = "serde")]
3230
impl<'de> Deserialize<'de> for Uuid {
3331
fn deserialize<D: Deserializer<'de>>(
3432
deserializer: D,
3533
) -> Result<Self, D::Error> {
34+
fn de_error<E: de::Error>(e: crate::Error) -> E {
35+
E::custom(format_args!("UUID parsing failed: {}", e))
36+
}
37+
3638
if deserializer.is_human_readable() {
3739
struct UuidStringVisitor;
3840

@@ -50,14 +52,14 @@ impl<'de> Deserialize<'de> for Uuid {
5052
self,
5153
value: &str,
5254
) -> Result<Uuid, E> {
53-
value.parse::<Uuid>().map_err(E::custom)
55+
value.parse::<Uuid>().map_err(de_error)
5456
}
5557

5658
fn visit_bytes<E: de::Error>(
5759
self,
5860
value: &[u8],
5961
) -> Result<Uuid, E> {
60-
Uuid::from_slice(value).map_err(E::custom)
62+
Uuid::from_slice(value).map_err(de_error)
6163
}
6264
}
6365

@@ -79,7 +81,7 @@ impl<'de> Deserialize<'de> for Uuid {
7981
self,
8082
value: &[u8],
8183
) -> Result<Uuid, E> {
82-
Uuid::from_slice(value).map_err(E::custom)
84+
Uuid::from_slice(value).map_err(de_error)
8385
}
8486
}
8587

@@ -88,33 +90,36 @@ impl<'de> Deserialize<'de> for Uuid {
8890
}
8991
}
9092

91-
#[cfg(all(test, feature = "serde"))]
93+
#[cfg(test)]
9294
mod serde_tests {
93-
use serde_test;
95+
use serde_test::{Compact, Configure, Readable, Token};
9496

9597
use crate::prelude::*;
9698

9799
#[test]
98100
fn test_serialize_readable() {
99-
use serde_test::Configure;
100-
101101
let uuid_str = "f9168c5e-ceb2-4faa-b6bf-329bf39fa1e4";
102102
let u = Uuid::parse_str(uuid_str).unwrap();
103-
serde_test::assert_tokens(
104-
&u.readable(),
105-
&[serde_test::Token::Str(uuid_str)],
106-
);
103+
serde_test::assert_tokens(&u.readable(), &[Token::Str(uuid_str)]);
107104
}
108105

109106
#[test]
110107
fn test_serialize_compact() {
111-
use serde_test::Configure;
112-
113108
let uuid_bytes = b"F9168C5E-CEB2-4F";
114109
let u = Uuid::from_slice(uuid_bytes).unwrap();
115-
serde_test::assert_tokens(
116-
&u.compact(),
117-
&[serde_test::Token::Bytes(uuid_bytes)],
110+
serde_test::assert_tokens(&u.compact(), &[Token::Bytes(uuid_bytes)]);
111+
}
112+
113+
#[test]
114+
fn test_de_failure() {
115+
serde_test::assert_de_tokens_error::<Readable<Uuid>>(
116+
&[Token::Str("hello_world")],
117+
"UUID parsing failed: invalid length: expected one of [36, 32], found 11",
118+
);
119+
120+
serde_test::assert_de_tokens_error::<Compact<Uuid>>(
121+
&[Token::Bytes(b"hello_world")],
122+
"UUID parsing failed: invalid bytes length: expected 16, found 11",
118123
);
119124
}
120125
}

0 commit comments

Comments
 (0)