Skip to content

Commit cef8f52

Browse files
authored
Add function to demonstrate serde integration (#179)
1 parent 0ed18fc commit cef8f52

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

examples/message_demo/Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,7 @@ version = "*"
1919

2020
[dependencies.rclrs_example_msgs]
2121
version = "*"
22+
features = ["serde"]
23+
24+
[dependencies.serde_json]
25+
version = "1.0"

examples/message_demo/src/message_demo.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,25 @@ fn demonstrate_printing() {
8585
);
8686
}
8787

88+
fn demonstrate_serde() -> Result<(), Error> {
89+
// When the serde feature is turned on, messages are able to be serialized
90+
// to and deserialized from a variety of formats. Here JSON is used as an
91+
// example.
92+
// Works with RMW-native and idiomatic messages.
93+
let idiomatic_msg = rclrs_example_msgs::msg::VariousTypes::default();
94+
let rmw_msg = rclrs_example_msgs::msg::rmw::VariousTypes::default();
95+
println!("================= JSON serialization with Serde ==================");
96+
let idiomatic_serialized = serde_json::to_string_pretty(&idiomatic_msg)?;
97+
let rmw_serialized = serde_json::to_string_pretty(&rmw_msg)?;
98+
assert_eq!(idiomatic_serialized, rmw_serialized);
99+
println!("{}", rmw_serialized);
100+
let idiomatic_deserialized = serde_json::from_str(&idiomatic_serialized)?;
101+
let rmw_deserialized = serde_json::from_str(&rmw_serialized)?;
102+
assert_eq!(idiomatic_msg, idiomatic_deserialized);
103+
assert_eq!(rmw_msg, rmw_deserialized);
104+
Ok(())
105+
}
106+
88107
fn demonstrate_sequences() {
89108
// Convenient creation of (bounded) sequences with the seq! macro
90109
// This one has three items and a length bound of 5
@@ -151,6 +170,7 @@ fn demonstrate_pubsub() -> Result<(), Error> {
151170
fn main() -> Result<(), Error> {
152171
check_default_values();
153172
demonstrate_printing();
173+
demonstrate_serde()?;
154174
demonstrate_sequences();
155175
demonstrate_pubsub()?;
156176
Ok(())

0 commit comments

Comments
 (0)