mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-22 22:58:02 +00:00
Added tests for unknown_fields_into
This commit is contained in:
@@ -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() {}
|
||||
@@ -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,
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user