1
use ron::value::{Number, Value};
2
use serde_derive::Deserialize;
3

            
4
#[derive(Debug, PartialEq, Deserialize)]
5
struct Config {
6
    id: u32,
7
    name: String,
8
}
9

            
10
#[test]
11
4
fn from_value_deserializes_struct() {
12
4
    let value: Value = ron::from_str("(id: 7, name: \"ron\")").unwrap();
13

            
14
4
    let config: Config = ron::de::from_value(value).unwrap();
15

            
16
4
    assert_eq!(
17
        config,
18
4
        Config {
19
4
            id: 7,
20
4
            name: "ron".to_owned(),
21
4
        }
22
    );
23
4
}
24

            
25
#[test]
26
4
fn from_value_matches_into_rust() {
27
4
    let value: Value = ron::from_str("(id: 1, name: \"a\")").unwrap();
28

            
29
4
    let via_fn: Config = ron::de::from_value(value.clone()).unwrap();
30
4
    let via_method: Config = value.into_rust().unwrap();
31

            
32
4
    assert_eq!(via_fn, via_method);
33
4
}
34

            
35
#[test]
36
4
fn from_value_reports_error_on_type_mismatch() {
37
4
    let value = Value::Number(Number::U8(1));
38

            
39
4
    let result: Result<Config, _> = ron::de::from_value(value);
40

            
41
4
    assert!(result.is_err());
42
4
}