Skip to content

Commit bf88f5f

Browse files
committed
examples/define_types.rs:add derive feature
1 parent 8b50884 commit bf88f5f

File tree

2 files changed

+56
-1
lines changed

2 files changed

+56
-1
lines changed

query/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ path = "src/lib.rs"
1919
clap = { version = "4", features = ["derive"] }
2020
futures = "0.3"
2121
log = "0.4.27"
22-
serde = "1.0"
22+
serde = { version = "1.0", features = ["derive"] }
2323
serde_json = "1.0"
2424
tokio = { version = "1", features = ["full"] }
2525
tokio-tungstenite = { version = "0.13.0", features = ["tls"] }

query/examples/define_types.rs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
use serde::{Deserialize, Serialize};
2+
use serde_json::Result;
3+
4+
// Define structs that mirror the JSON structure
5+
#[derive(Debug, Deserialize, Serialize)]
6+
struct Outer {
7+
level1_key: Inner,
8+
other_key: String,
9+
}
10+
11+
#[derive(Debug, Deserialize, Serialize)]
12+
struct Inner {
13+
level2_key_a: String,
14+
level2_key_b: i64,
15+
another_nested: DeepInner,
16+
}
17+
18+
#[derive(Debug, Deserialize, Serialize)]
19+
struct DeepInner {
20+
deep_key: bool,
21+
}
22+
23+
fn main() -> Result<()> {
24+
let json_data = r#"
25+
{
26+
"level1_key": {
27+
"level2_key_a": "value_a",
28+
"level2_key_b": 123,
29+
"another_nested": {
30+
"deep_key": true
31+
}
32+
},
33+
"other_key": "some_other_value"
34+
}
35+
"#;
36+
37+
// Deserialize the JSON string directly into your Rust struct
38+
let parsed_data: Outer = serde_json::from_str(json_data)?;
39+
40+
// Access the second-level key directly through struct fields
41+
let level2_value_a = &parsed_data.level1_key.level2_key_a;
42+
let level2_value_b = parsed_data.level1_key.level2_key_b;
43+
let deep_value = parsed_data.level1_key.another_nested.deep_key;
44+
45+
46+
println!("Value of level2_key_a: {}", level2_value_a);
47+
println!("Value of level2_key_b: {}", level2_value_b);
48+
println!("Value of deep_key: {}", deep_value);
49+
50+
// If a field is missing or has the wrong type, serde_json::from_str will return an Err
51+
// let invalid_json = r#"{ "level1_key": { "level2_key_a": "oops" } }"#;
52+
// let _ = serde_json::from_str::<Outer>(invalid_json); // This would return an Error
53+
54+
Ok(())
55+
}

0 commit comments

Comments
 (0)