#protobuf #iot #api-bindings

sparkplug-rs

Sparkplug protobuf bindings for Rust

11 releases

0.5.1 Jun 12, 2025
0.5.0 Jun 12, 2025
0.4.0 May 13, 2022
0.3.3 Mar 15, 2022
0.1.3 Mar 12, 2022

#785 in Encoding


Used in 2 crates

EPL-2.0 license

24KB
427 lines

sparkplug-rs License Latest Version Documentation Issues FOSSA Status

Rust protobuf payload for Sparkplug™. The structs are generated with the protobuf IDL of the Eclipse Tahu project. For more information look at the homepage of the Eclipse Sparkplug project.

MQTT Topic Names

This crate provides a convenient way to handle MQTT topic names with TopicName.

JSON

For JSON serialization/deserialization of protobuf messages, instead of adding a dependency on serde, I recommend checking out the protobuf-json-mapping crate. This crate is specifically designed to work with protobuf messages and provides the JSON mapping functionality you likely need, while keeping dependencies minimal and aligned with the protobuf ecosystem. This approach is more lightweight since it avoids bringing in the full serde ecosystem when you only need protobuf-specific JSON handling.

Examples

# use std::str::FromStr;
# use sparkplug_rs::{NodeMessageType, TopicName, TopicNamespace};
let node = TopicName::new_node_message(TopicNamespace::SPBV1_0,
"my_group".to_string(),
NodeMessageType::NBIRTH,
"nodeId".to_string());
assert_eq!(node.to_string(), "spBv1.0/my_group/NBIRTH/nodeId");

let topic: TopicName = TopicName::from_str("spBv1.0/my_group/NBIRTH/nodeId").unwrap();
assert_eq!(topic, node);

License: EPL-2.0

License

FOSSA Status

Dependencies

~1.7–4MB
~68K SLoC