pub enum Json {
Null,
Bool(bool),
Number(f64),
String(String),
Array(Vec<Json>),
Object(BTreeMap<String, Json>),
}Expand description
A JSON value.
Variants§
Null
null
Bool(bool)
true or false
Number(f64)
A number.
String(String)
A string.
Array(Vec<Json>)
An array.
Object(BTreeMap<String, Json>)
An object. Ordered so output is deterministic.
Implementations§
Source§impl Json
impl Json
Sourcepub fn object(pairs: Vec<(&str, Self)>) -> Self
pub fn object(pairs: Vec<(&str, Self)>) -> Self
Build an object from pairs.
Examples found in repository?
examples/parse_and_build.rs (lines 37-44)
14fn main() {
15 let request = r#"{"jsonrpc":"2.0","id":7,"method":"initialize","params":{"trace":"off"}}"#;
16
17 let value = parse(request).expect("the request is valid JSON");
18
19 // `get` walks objects; it returns `None` for a missing key and for
20 // a value that is not an object, so chains do not need a type check
21 // at every step.
22 assert_eq!(
23 value.get("method").and_then(Json::as_str),
24 Some("initialize")
25 );
26 assert_eq!(
27 value
28 .get("params")
29 .and_then(|p| p.get("trace"))
30 .and_then(Json::as_str),
31 Some("off")
32 );
33
34 // Building a reply. Object keys come back out in sorted order,
35 // which makes serialised output comparable in a test without
36 // parsing it again.
37 let reply = Json::object(vec![
38 ("jsonrpc", Json::str("2.0")),
39 ("id", value.get("id").cloned().unwrap_or(Json::Null)),
40 (
41 "result",
42 Json::object(vec![("capabilities", Json::object(vec![]))]),
43 ),
44 ]);
45
46 println!("{}", reply.to_json());
47
48 // Malformed input is an error with a message, not a panic and not
49 // a silent default.
50 let bad = parse("{\"unterminated\": ");
51 println!("malformed input: {}", bad.unwrap_err());
52}Sourcepub fn str(s: impl Into<String>) -> Self
pub fn str(s: impl Into<String>) -> Self
A string value.
Examples found in repository?
examples/parse_and_build.rs (line 38)
14fn main() {
15 let request = r#"{"jsonrpc":"2.0","id":7,"method":"initialize","params":{"trace":"off"}}"#;
16
17 let value = parse(request).expect("the request is valid JSON");
18
19 // `get` walks objects; it returns `None` for a missing key and for
20 // a value that is not an object, so chains do not need a type check
21 // at every step.
22 assert_eq!(
23 value.get("method").and_then(Json::as_str),
24 Some("initialize")
25 );
26 assert_eq!(
27 value
28 .get("params")
29 .and_then(|p| p.get("trace"))
30 .and_then(Json::as_str),
31 Some("off")
32 );
33
34 // Building a reply. Object keys come back out in sorted order,
35 // which makes serialised output comparable in a test without
36 // parsing it again.
37 let reply = Json::object(vec![
38 ("jsonrpc", Json::str("2.0")),
39 ("id", value.get("id").cloned().unwrap_or(Json::Null)),
40 (
41 "result",
42 Json::object(vec![("capabilities", Json::object(vec![]))]),
43 ),
44 ]);
45
46 println!("{}", reply.to_json());
47
48 // Malformed input is an error with a message, not a panic and not
49 // a silent default.
50 let bad = parse("{\"unterminated\": ");
51 println!("malformed input: {}", bad.unwrap_err());
52}Sourcepub fn get(&self, key: &str) -> Option<&Self>
pub fn get(&self, key: &str) -> Option<&Self>
Look up a key on an object.
Examples found in repository?
examples/parse_and_build.rs (line 23)
14fn main() {
15 let request = r#"{"jsonrpc":"2.0","id":7,"method":"initialize","params":{"trace":"off"}}"#;
16
17 let value = parse(request).expect("the request is valid JSON");
18
19 // `get` walks objects; it returns `None` for a missing key and for
20 // a value that is not an object, so chains do not need a type check
21 // at every step.
22 assert_eq!(
23 value.get("method").and_then(Json::as_str),
24 Some("initialize")
25 );
26 assert_eq!(
27 value
28 .get("params")
29 .and_then(|p| p.get("trace"))
30 .and_then(Json::as_str),
31 Some("off")
32 );
33
34 // Building a reply. Object keys come back out in sorted order,
35 // which makes serialised output comparable in a test without
36 // parsing it again.
37 let reply = Json::object(vec![
38 ("jsonrpc", Json::str("2.0")),
39 ("id", value.get("id").cloned().unwrap_or(Json::Null)),
40 (
41 "result",
42 Json::object(vec![("capabilities", Json::object(vec![]))]),
43 ),
44 ]);
45
46 println!("{}", reply.to_json());
47
48 // Malformed input is an error with a message, not a panic and not
49 // a silent default.
50 let bad = parse("{\"unterminated\": ");
51 println!("malformed input: {}", bad.unwrap_err());
52}Sourcepub fn to_json(&self) -> String
pub fn to_json(&self) -> String
Serialise to JSON text.
Examples found in repository?
examples/parse_and_build.rs (line 46)
14fn main() {
15 let request = r#"{"jsonrpc":"2.0","id":7,"method":"initialize","params":{"trace":"off"}}"#;
16
17 let value = parse(request).expect("the request is valid JSON");
18
19 // `get` walks objects; it returns `None` for a missing key and for
20 // a value that is not an object, so chains do not need a type check
21 // at every step.
22 assert_eq!(
23 value.get("method").and_then(Json::as_str),
24 Some("initialize")
25 );
26 assert_eq!(
27 value
28 .get("params")
29 .and_then(|p| p.get("trace"))
30 .and_then(Json::as_str),
31 Some("off")
32 );
33
34 // Building a reply. Object keys come back out in sorted order,
35 // which makes serialised output comparable in a test without
36 // parsing it again.
37 let reply = Json::object(vec![
38 ("jsonrpc", Json::str("2.0")),
39 ("id", value.get("id").cloned().unwrap_or(Json::Null)),
40 (
41 "result",
42 Json::object(vec![("capabilities", Json::object(vec![]))]),
43 ),
44 ]);
45
46 println!("{}", reply.to_json());
47
48 // Malformed input is an error with a message, not a panic and not
49 // a silent default.
50 let bad = parse("{\"unterminated\": ");
51 println!("malformed input: {}", bad.unwrap_err());
52}Trait Implementations§
impl StructuralPartialEq for Json
Auto Trait Implementations§
impl Freeze for Json
impl RefUnwindSafe for Json
impl Send for Json
impl Sync for Json
impl Unpin for Json
impl UnsafeUnpin for Json
impl UnwindSafe for Json
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more