diff --git a/docs/migration_1.0/rust/index.html b/docs/migration_1.0/rust/index.html index e13e62b5..d1e7ae32 100644 --- a/docs/migration_1.0/rust/index.html +++ b/docs/migration_1.0/rust/index.html @@ -1,6 +1,6 @@ Rust · Zenoh - pub/sub, geo distributed storage, query

Rust

Module reorganization

We reorganized the module tree, so import paths are not the same as before. The main difference is that everything should be imported via the root path zenoh::. Here are some examples, but you can look into zenoh/src/lib.rs for the complete list of changes.

// common use
+

Rust

Module reorganization

We reorganized the module tree, so import paths are not the same as before. The main difference is that everything should be imported via the root path zenoh::. Here are some examples, but you can look into zenoh/src/lib.rs for the complete list of changes.

// common use
 use zenoh::config::*;
 use zenoh::{Config, Error, Result};
 
@@ -72,7 +72,24 @@
 // **when all remaining data has been processed**.
 // subscriber undeclaration has not been sent on the wire
 subscriber_task.await.unwrap()
-

Value is gone, long live ZBytes

We have replaced Value with ZBytes and Encoding , and added a number of conversion implementations such that user structs can be serialized into ZBytes, sent via Zenoh, and de-serialized from ZBytes with ease.

This is facilitated through the ZSerde struct, and implementations of the traits +

Callbacks run in background until session is closed

Session entities, e.g. subscribers, declared with callbacks are no longer undeclared when they are dropped; there is no longer need to keep a reference to an entity when the intent is to have it run until the session is closed.

let session = zenoh::open(zenoh::config::default()).await.unwrap();
+session
+    .declare_subscriber("key/ expression")
+    .callback(|sample| { println!("Received: {} {:?}", sample. key_expr(), sample. payload()) })
+    .await
+    .unwrap();
+// subscriber run in background until the session is closed
+// no need to keep a variable around
+

If you still want the entity to be undeclared when dropped, you can simply use with instead of callback; it may just require you to annotate the callback, as type inference is not as good as with callback method.

let session = zenoh::open(zenoh::config::default()).await.unwrap();
+let subscriber = session
+    .declare_subscriber("key/ expression")
+    // annotation needed
+    .with(|sample: Sample| { println!("Received: {} {:?}", sample. key_expr(), sample. payload()) })
+    .await
+    .unwrap();
+// subscriber is undeclared when dropped
+

Going into details, a new method undeclare_on_drop(bool) – default to true, has been added to the builders, and callback(cb) is now simply a shortcut to with(cb).undeclare_on_drop(false). +However, the normal user would rarely need to call this method directly.

Value is gone, long live ZBytes

We have replaced Value with ZBytes and Encoding , and added a number of conversion implementations such that user structs can be serialized into ZBytes, sent via Zenoh, and de-serialized from ZBytes with ease.

This is facilitated through the ZSerde struct, and implementations of the traits zenoh::bytes::Deserialize and zenoh::bytes::Serialize.

We provide implementations of Zenoh’s aforementioned Deserialize and Serialize traits for primitive Rust types, Rust’s Vec, the Value type exposed by Serde’s various libraries as well as an example of Protobuf ’s prost::Message type.

You can look at a full set of examples in examples/examples/z_bytes.rs.

NOTE: ⚠️ ZSerde is not the only serializer/deserializer users can make use of, nor a limitation to the types supported by Zenoh. Users are free to use whichever serializer/deserializer they wish!

  • Zenoh 0.11.x
let sample = subscriber.recv_async().await.unwrap();
 let value: Value = sample.value;
 let the_string: String = value.try_into().unwrap();