From 6bc6d579b4c07e282a1b98e37ea821c348a67b38 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 27 Sep 2022 09:35:19 +0200 Subject: Add checking for equal message type UUIDs Signed-off-by: Matthias Beyer --- crates/core/tedge_core/src/lib.rs | 25 +++++++++++++++++++++++-- 1 file 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 -- cgit v1.2.3