diff options
-rw-r--r-- | Cargo.lock | 27 | ||||
-rw-r--r-- | crates/core/tedge_api/Cargo.toml | 1 | ||||
-rw-r--r-- | crates/core/tedge_api/README.md | 5 | ||||
-rw-r--r-- | crates/core/tedge_api/examples/heartbeat.rs | 7 | ||||
-rw-r--r-- | crates/core/tedge_api/examples/universal_log.rs | 7 | ||||
-rw-r--r-- | crates/core/tedge_api/src/address.rs | 21 | ||||
-rw-r--r-- | crates/core/tedge_api/src/lib.rs | 3 | ||||
-rw-r--r-- | crates/core/tedge_api/src/message.rs | 20 | ||||
-rw-r--r-- | crates/core/tedge_api/src/plugin.rs | 16 |
9 files changed, 85 insertions, 22 deletions
@@ -2872,6 +2872,7 @@ dependencies = [ "tokio-util 0.7.0", "toml", "tracing", + "type-uuid", ] [[package]] @@ -3396,6 +3397,26 @@ dependencies = [ ] [[package]] +name = "type-uuid" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15043bca41f43205c9b0055d365a405d81b8e4a8ff99c36b263cf79ad1f4c051" +dependencies = [ + "type-uuid-derive", +] + +[[package]] +name = "type-uuid-derive" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e090ee857961c746ecf7fb596022493ffaad54d189061df49f7a0cf17796dc1" +dependencies = [ + "quote 1.0.18", + "syn 1.0.93", + "uuid", +] + +[[package]] name = "typed-arena" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3490,6 +3511,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" + +[[package]] name = "value-bag" version = "1.0.0-alpha.8" source = "registry+https://github.com/rust-lang/crates.io-index" diff --git a/crates/core/tedge_api/Cargo.toml b/crates/core/tedge_api/Cargo.toml index 5546ed2b..a4ff92ab 100644 --- a/crates/core/tedge_api/Cargo.toml +++ b/crates/core/tedge_api/Cargo.toml @@ -21,6 +21,7 @@ termimad = "0.20.1" nu-ansi-term = "0.45.1" tedge_config_derive = { version = "0.1.0", path = "tedge_config_derive" } tracing = "0.1" +type-uuid = "0.1.2" [dev-dependencies] pretty_assertions = "1.2.1" diff --git a/crates/core/tedge_api/README.md b/crates/core/tedge_api/README.md index 340faa23..8c59231a 100644 --- a/crates/core/tedge_api/README.md +++ b/crates/core/tedge_api/README.md @@ -85,7 +85,10 @@ others. For example: ```rust -#[derive(Debug)] +use tedge_api::{Message, TypeUuid}; + +#[derive(Debug, TypeUuid)] +#[uuid = "b60dd50c-ccef-4204-b370-18bbbb68d6e2"] struct Value(f64); impl Message for Value {} diff --git a/crates/core/tedge_api/examples/heartbeat.rs b/crates/core/tedge_api/examples/heartbeat.rs index b253009b..8d64232a 100644 --- a/crates/core/tedge_api/examples/heartbeat.rs +++ b/crates/core/tedge_api/examples/heartbeat.rs @@ -10,17 +10,20 @@ use tedge_api::{ PluginError, }; use tokio::sync::RwLock; +use type_uuid::TypeUuid; +#[derive(Debug, TypeUuid)] +#[uuid = "94916be9-17ba-4bca-a3a0-408d33136fed"] /// A message that represents a heartbeat that gets sent to plugins -#[derive(Debug)] struct Heartbeat; impl Message for Heartbeat {} impl AcceptsReplies for Heartbeat { type Reply = HeartbeatStatus; } +#[derive(Debug, TypeUuid)] +#[uuid = "a6d03c65-51bf-4f89-b383-c67c9ed8533b"] /// The reply for a heartbeat -#[derive(Debug)] enum HeartbeatStatus { Alive, Degraded, diff --git a/crates/core/tedge_api/examples/universal_log.rs b/crates/core/tedge_api/examples/universal_log.rs index 34090040..064ffa22 100644 --- a/crates/core/tedge_api/examples/universal_log.rs +++ b/crates/core/tedge_api/examples/universal_log.rs @@ -10,13 +10,16 @@ use tedge_api::{ PluginError, }; use tokio::sync::RwLock; +use type_uuid::TypeUuid; /// A message that represents a heartbeat that gets sent to plugins -#[derive(Debug)] +#[derive(Debug, TypeUuid)] +#[uuid = "1f807f7b-888f-4881-a1b5-16380e32f8c2"] struct Heartbeat; impl Message for Heartbeat {} -#[derive(Debug)] +#[derive(Debug, TypeUuid)] +#[uuid = "346e233f-c24a-47e0-a15b-3ec0d1e19019"] struct RandomData; impl Message for RandomData {} diff --git a/crates/core/tedge_api/src/address.rs b/crates/core/tedge_api/src/address.rs index 47b2fdea..4249ecfc 100644 --- a/crates/core/tedge_api/src/address.rs +++ b/crates/core/tedge_api/src/address.rs @@ -4,9 +4,7 @@ use futures::future::BoxFuture; use tokio::sync::RwLock; use tracing::{instrument, trace}; -use crate::{ - message::{Message, MessageType, AcceptsReplies}, -}; +use crate::message::{AcceptsReplies, Message, MessageType}; #[doc(hidden)] pub type AnyMessageBox = Box<dyn Message>; @@ -362,13 +360,16 @@ pub trait Contains<M: Message> {} /// /// ```rust /// # use tedge_api::{Message, make_receiver_bundle}; +/// # use type_uuid::TypeUuid; /// -/// #[derive(Debug)] +/// #[derive(Debug, TypeUuid)] +/// #[uuid = "b4e62630-0404-4d39-b435-95d777029887"] /// struct IntMessage(u8); /// /// impl Message for IntMessage { } /// -/// #[derive(Debug)] +/// #[derive(Debug, TypeUuid)] +/// #[uuid = "92734ceb-7b65-499a-95cd-17164f1b3729"] /// struct StatusMessage(String); /// /// impl Message for StatusMessage { } @@ -405,6 +406,7 @@ mod tests { use static_assertions::{assert_impl_all, assert_not_impl_any}; use tokio::sync::RwLock; + use type_uuid::TypeUuid; use crate::{ address::{InnerMessageSender, ReplyReceiverFor, ReplySenderFor}, @@ -413,7 +415,8 @@ mod tests { Address, }; - #[derive(Debug)] + #[derive(Debug, TypeUuid)] + #[uuid = "df2b8bb3-8c15-49bb-8d11-cc14d7f3b000"] struct Foo; impl Message for Foo {} @@ -421,12 +424,14 @@ mod tests { type Reply = Bar; } - #[derive(Debug)] + #[derive(Debug, TypeUuid)] + #[uuid = "953a243d-333a-4870-8297-272fff6262b5"] struct Bar; impl Message for Bar {} - #[derive(Debug)] + #[derive(Debug, TypeUuid)] + #[uuid = "fe98650c-b067-47f4-8fd8-2f3ed04fdc21"] struct Blub; impl Message for Blub {} diff --git a/crates/core/tedge_api/src/lib.rs b/crates/core/tedge_api/src/lib.rs index 758c33aa..f9716981 100644 --- a/crates/core/tedge_api/src/lib.rs +++ b/crates/core/tedge_api/src/lib.rs @@ -33,6 +33,9 @@ pub use tokio_util::sync::CancellationToken; /// Derive macro for self-describing configurations pub use tedge_config_derive::Config; +/// Derive macro for type uuids +pub use type_uuid::TypeUuid; + #[doc(hidden)] pub mod _internal { pub use futures::future::BoxFuture; diff --git a/crates/core/tedge_api/src/message.rs b/crates/core/tedge_api/src/message.rs index 7fe1fc1a..9df11b51 100644 --- a/crates/core/tedge_api/src/message.rs +++ b/crates/core/tedge_api/src/message.rs @@ -1,5 +1,6 @@ use downcast_rs::{impl_downcast, DowncastSync}; use serde::Serialize; +use type_uuid::{TypeUuid, TypeUuidDynamic}; use crate::address::AnyMessageBox; @@ -7,7 +8,10 @@ use crate::address::AnyMessageBox; /// /// This trait is a marker trait for all types that can be used as messages which can be sent /// between plugins in thin-edge. -pub trait Message: Send + std::fmt::Debug + DynMessage + DowncastSync + 'static {} +pub trait Message: + Send + std::fmt::Debug + DynMessage + DowncastSync + TypeUuidDynamic + 'static +{ +} impl_downcast!(sync Message); @@ -33,7 +37,8 @@ pub trait AcceptsReplies: Message { /// otherwise. /// /// To construct it, you will need to have a message and call [`AnyMessage::from_message`] -#[derive(Debug)] +#[derive(Debug, TypeUuid)] +#[uuid = "e7e5c87b-2022-4687-8650-DEADBEEEEEEF"] pub struct AnyMessage(pub(crate) AnyMessageBox); impl std::ops::Deref for AnyMessage { @@ -136,7 +141,8 @@ impl MessageType { } /// A message to tell the core to stop thin-edge -#[derive(Debug)] +#[derive(Debug, TypeUuid)] +#[uuid = "812b7235-671f-4722-b01a-333578b2a4ea"] pub struct StopCore; impl Message for StopCore {} @@ -145,16 +151,20 @@ crate::make_receiver_bundle!(pub struct CoreMessages(StopCore)); #[cfg(test)] mod tests { + use type_uuid::TypeUuid; + use crate::Message; use super::{AnyMessage, MessageType}; - #[derive(Debug)] + #[derive(Debug, TypeUuid)] + #[uuid = "0c2ed228-5ff0-4ba5-a0d3-3648f7eb6558"] struct Bar; impl Message for Bar {} - #[derive(Debug)] + #[derive(Debug, TypeUuid)] + #[uuid = "8c3beacb-327d-422d-a914-47006d521ba5"] struct Foo; impl Message for Foo {} diff --git a/crates/core/tedge_api/src/plugin.rs b/crates/core/tedge_api/src/plugin.rs index 1b3be154..6772805a 100644 --- a/crates/core/tedge_api/src/plugin.rs +++ b/crates/core/tedge_api/src/plugin.rs @@ -96,8 +96,10 @@ pub trait PluginBuilder<PD: PluginDirectory>: Sync + Send + 'static { /// /// ```no_run /// # use tedge_api::{Plugin, plugin::BuiltPlugin, PluginError, PluginExt, PluginDirectory, PluginBuilder, PluginConfiguration}; + /// # use type_uuid::TypeUuid; /// - /// #[derive(Debug)] + /// #[derive(Debug, TypeUuid)] + /// #[uuid = "46f5d318-4158-4726-83dd-9b310cae3328"] /// struct MyMessage; /// impl tedge_api::Message for MyMessage { } /// @@ -217,8 +219,10 @@ pub trait PluginBuilder<PD: PluginDirectory>: Sync + Send + 'static { /// # use tedge_api::PluginBuilder; /// # use tedge_api::PluginDirectory; /// # use tedge_api::PluginExt; + /// # use type_uuid::TypeUuid; /// - /// #[derive(Debug)] + /// #[derive(Debug, TypeUuid)] + /// #[uuid = "39046e3e-05ad-4b16-bbf1-8c2d2da5b668"] /// struct MyMessage; /// impl tedge_api::Message for MyMessage { } /// @@ -383,8 +387,10 @@ impl HandleTypes { /// # use tedge_api::address::ReplySenderFor; /// # use tedge_api::PluginError; /// # use tedge_api::PluginExt; + /// # use type_uuid::TypeUuid; /// - /// #[derive(Debug)] + /// #[derive(Debug, TypeUuid)] + /// #[uuid = "1276aa9c-5e04-4ab3-a987-61d89765ab33"] /// struct Heartbeat; /// /// impl tedge_api::Message for Heartbeat { } @@ -671,12 +677,14 @@ mod tests { use super::{Plugin, PluginBuilder}; use static_assertions::assert_obj_safe; + use type_uuid::TypeUuid; // Object Safety assert_obj_safe!(PluginBuilder<()>); assert_obj_safe!(Plugin); - #[derive(Debug)] + #[derive(Debug, TypeUuid)] + #[uuid = "44d61fba-0055-4333-86bf-e96e06f7aea8"] struct Blub; impl Message for Blub {} |