summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <matthias.beyer@ifm.com>2022-09-27 09:35:19 +0200
committerMatthias Beyer <matthias.beyer@ifm.com>2022-09-27 09:35:19 +0200
commit6bc6d579b4c07e282a1b98e37ea821c348a67b38 (patch)
treed054a53cec8080a18268cca801353d60030f8590
parent0cba25dab0a0918b7059b5324b6ef39cbfa0a28d (diff)
Add checking for equal message type UUIDspost-merge/message-type-registry
Signed-off-by: Matthias Beyer <matthias.beyer@ifm.com>
-rw-r--r--crates/core/tedge_core/src/lib.rs25
1 files changed, 23 insertions, 2 deletions
diff --git a/crates/core/tedge_core/src/lib.rs b/crates/core/tedge_core/src/lib.rs
index 43a80b49..dff1a238 100644
--- a/crates/core/tedge_core/src/lib.rs
+++ b/crates/core/tedge_core/src/lib.rs
@@ -191,8 +191,29 @@ impl TedgeApplicationBuilder {
return self;
}
- self.message_types
- .extend(handle_types.get_types().iter().cloned());
+ {
+ for message_type in handle_types.get_types().iter() {
+ if let Some(mt) = self
+ .message_types
+ .iter()
+ .filter(|mt| mt.name() != message_type.name() && mt.eq_uuid(message_type))
+ .next()
+ {
+ self.errors
+ .push(TedgeApplicationBuilderError::DuplicatedMessageUuid {
+ first_message_name: mt.name(),
+ second_message_name: message_type.name(),
+ // SAFETY: Unwrap is safe because MessageType::eq_uuid() (used to fetch
+ // `mt` here) only returns true if we have two MessageKind::Typed (with an
+ // UUID). So MessageType::uuid() will here always return Some(_).
+ uuid: mt.uuid().unwrap(),
+ });
+ }
+ }
+ self.message_types
+ .extend(handle_types.get_types().iter().cloned());
+ }
+
self.plugin_builders
.insert(kind_name.to_string(), (handle_types, Box::new(builder)));
self