Added tests for unknown_fields_into

This commit is contained in:
Armin Ronacher
2018-03-14 18:46:47 +01:00
parent 1bd2c6129c
commit 77b07f3fbf
3 changed files with 80 additions and 0 deletions
@@ -0,0 +1,19 @@
// Copyright 2018 Serde Developers
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#[macro_use]
extern crate serde_derive;
#[derive(Serialize)] //~ ERROR: the trait bound `&std::string::String: std::iter::Iterator` is not satisfied
#[serde(repr = "map", unknown_fields_into="other")]
struct X {
a: u32,
other: String,
}
fn main() {}
@@ -0,0 +1,20 @@
// Copyright 2018 Serde Developers
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#[macro_use]
extern crate serde_derive;
#[derive(Serialize)] //~ ERROR: proc-macro derive panicked
#[serde(repr = "struct", unknown_fields_into="other")]
//~^^ HELP: #[serde(unknown_fields_into)] requires repr="map"
struct X {
a: u32,
other: HashMap<String, String>,
}
fn main() {}
+41
View File
@@ -12,6 +12,7 @@
extern crate serde_derive;
extern crate serde;
use std::collections::HashMap;
use self::serde::{Deserialize, Deserializer, Serialize, Serializer};
use self::serde::de::{self, Unexpected};
@@ -94,6 +95,14 @@ where
a5: E,
}
#[derive(Debug, PartialEq, Serialize, Deserialize)]
#[serde(repr="map", unknown_fields_into="extra")]
struct CollectOther {
a: u32,
b: u32,
extra: HashMap<String, u32>,
}
#[test]
fn test_default_struct() {
assert_de_tokens(
@@ -1267,3 +1276,35 @@ fn test_from_into_traits() {
assert_ser_tokens::<StructFromEnum>(&StructFromEnum(None), &[Token::None]);
assert_de_tokens::<StructFromEnum>(&StructFromEnum(Some(2)), &[Token::Some, Token::U32(2)]);
}
#[test]
fn test_collect_other() {
let mut extra = HashMap::new();
extra.insert("c".into(), 3);
assert_de_tokens(
&CollectOther { a: 1, b: 2, extra: extra.clone() },
&[
Token::Map { len: None },
Token::Str("a"),
Token::U32(1),
Token::Str("b"),
Token::U32(2),
Token::Str("c"),
Token::U32(3),
Token::MapEnd,
],
);
assert_ser_tokens(
&CollectOther { a: 1, b: 2, extra: extra },
&[
Token::Map { len: None },
Token::Str("a"),
Token::U32(1),
Token::Str("b"),
Token::U32(2),
Token::Str("c"),
Token::U32(3),
Token::MapEnd,
],
);
}