mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-12 12:01:03 +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_derive;
|
||||||
|
|
||||||
extern crate serde;
|
extern crate serde;
|
||||||
|
use std::collections::HashMap;
|
||||||
use self::serde::{Deserialize, Deserializer, Serialize, Serializer};
|
use self::serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||||
use self::serde::de::{self, Unexpected};
|
use self::serde::de::{self, Unexpected};
|
||||||
|
|
||||||
@@ -94,6 +95,14 @@ where
|
|||||||
a5: E,
|
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]
|
#[test]
|
||||||
fn test_default_struct() {
|
fn test_default_struct() {
|
||||||
assert_de_tokens(
|
assert_de_tokens(
|
||||||
@@ -1267,3 +1276,35 @@ fn test_from_into_traits() {
|
|||||||
assert_ser_tokens::<StructFromEnum>(&StructFromEnum(None), &[Token::None]);
|
assert_ser_tokens::<StructFromEnum>(&StructFromEnum(None), &[Token::None]);
|
||||||
assert_de_tokens::<StructFromEnum>(&StructFromEnum(Some(2)), &[Token::Some, Token::U32(2)]);
|
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