json_value_resolve/
lib.rs1extern crate serde_json;
2
3use serde_json::Value;
4
5pub trait Resolve {
12 fn resolve(value: String) -> Value;
22}
23
24impl Resolve for serde_json::Value {
25 fn resolve(scalar_char: String) -> Value {
26 match scalar_char.parse::<u64>() {
27 Ok(value) => return Value::Number(serde_json::Number::from(value)),
28 Err(_) => (),
29 };
30 match scalar_char.parse::<i64>() {
31 Ok(value) => return Value::Number(serde_json::Number::from(value)),
32 Err(_) => (),
33 };
34 match scalar_char.parse::<f64>() {
35 Ok(value) => {
36 if let Some(value) = serde_json::Number::from_f64(value) {
37 return Value::Number(value);
38 }
39 }
40 Err(_) => (),
41 };
42 match scalar_char.parse::<bool>() {
43 Ok(value) => return Value::Bool(value),
44 Err(_) => (),
45 };
46 match scalar_char.as_ref() {
47 "null" => return Value::Null,
48 _ => (),
49 };
50 match serde_json::from_str(scalar_char.as_str()) {
51 Ok(value) => return value,
52 _ => (),
53 }
54
55 Value::String(scalar_char)
56 }
57}
58
59#[cfg(test)]
60mod serde_json_value_updater_test {
61 use super::*;
62 #[test]
63 fn it_should_resolve_scalar_null() {
64 let string_value = "null".to_string();
65 let json_value = Value::resolve(string_value);
66 assert_eq!((), json_value.as_null().unwrap());
67 }
68 #[test]
69 fn it_should_resolve_scalar_unsigned_number() {
70 let string_value = "10".to_string();
71 let json_value = Value::resolve(string_value);
72 assert_eq!(10, json_value.as_u64().unwrap());
73 }
74 #[test]
75 fn it_should_resolve_scalar_signed_number() {
76 let string_value = "-00010000".to_string();
77 let json_value = Value::resolve(string_value);
78 assert_eq!(-10000, json_value.as_i64().unwrap());
79 }
80 #[test]
81 fn it_should_resolve_scalar_float() {
82 let string_value = "10.50".to_string();
83 let json_value = Value::resolve(string_value);
84 assert_eq!(10.50, json_value.as_f64().unwrap());
85 }
86 #[test]
87 fn it_should_resolve_scalar_signed_float_number() {
88 let string_value = "-10.50".to_string();
89 let json_value = Value::resolve(string_value);
90 assert_eq!(-10.50, json_value.as_f64().unwrap());
91 }
92 #[test]
93 fn it_should_resolve_string_boolean() {
94 let string_value = "true".to_string();
95 let json_value = Value::resolve(string_value);
96 assert_eq!(true, json_value.as_bool().unwrap());
97 }
98 #[test]
99 fn it_should_resolve_json_value_string() {
100 let string_value = "my string".to_string();
101 let json_value = Value::resolve(string_value);
102 assert_eq!("my string", json_value.as_str().unwrap());
103 }
104 #[test]
105 fn it_should_resolve_json_value_object() {
106 let string_object = r#"{"field":"value"}"#.to_string();
107 let json_value = Value::resolve(string_object);
108 assert_eq!(r#"{"field":"value"}"#, json_value.to_string());
109 }
110}