Merge pull request #255 from kornelski/master
Support deserializing from other integer types
This commit is contained in:
commit
48daf82e1a
16
src/value.rs
16
src/value.rs
|
@ -423,6 +423,22 @@ impl<'de> de::Deserialize<'de> for Value {
|
||||||
Ok(Value::Integer(value))
|
Ok(Value::Integer(value))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn visit_u64<E: de::Error>(self, value: u64) -> Result<Value, E> {
|
||||||
|
if value <= i64::max_value() as u64 {
|
||||||
|
Ok(Value::Integer(value as i64))
|
||||||
|
} else {
|
||||||
|
Err(de::Error::custom("u64 value was too large"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_u32<E>(self, value: u32) -> Result<Value, E> {
|
||||||
|
Ok(Value::Integer(value.into()))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_i32<E>(self, value: i32) -> Result<Value, E> {
|
||||||
|
Ok(Value::Integer(value.into()))
|
||||||
|
}
|
||||||
|
|
||||||
fn visit_f64<E>(self, value: f64) -> Result<Value, E> {
|
fn visit_f64<E>(self, value: f64) -> Result<Value, E> {
|
||||||
Ok(Value::Float(value))
|
Ok(Value::Float(value))
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
extern crate serde;
|
extern crate serde;
|
||||||
|
extern crate serde_json;
|
||||||
extern crate toml;
|
extern crate toml;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate serde_derive;
|
extern crate serde_derive;
|
||||||
|
@ -589,3 +590,15 @@ fn fixed_size_array() {
|
||||||
assert_eq!(value, expected);
|
assert_eq!(value, expected);
|
||||||
assert_eq!(toml::to_string(&value).unwrap(), text);
|
assert_eq!(toml::to_string(&value).unwrap(), text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn json_interoperability() {
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
struct Foo {
|
||||||
|
any: toml::Value
|
||||||
|
}
|
||||||
|
|
||||||
|
let _foo: Foo = serde_json::from_str(r#"
|
||||||
|
{"any":1}
|
||||||
|
"#).unwrap();
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue