summaryrefslogtreecommitdiffstats
path: root/crates/core/tedge_core/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/core/tedge_core/src/lib.rs')
-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