From f57b683cb4dc471913698134d7a6ce01380f336c Mon Sep 17 00:00:00 2001 From: trivernis Date: Sat, 16 Oct 2021 12:27:42 +0200 Subject: [PATCH] Add events macro and change provider to provide static strings Signed-off-by: trivernis --- Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 6 ++++-- src/lib.rs | 7 +++++-- src/macros.rs | 14 ++++++++++++++ src/namespaces/provider_trait.rs | 2 +- src/tests/ipc_tests.rs | 9 ++++++--- 7 files changed, 32 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2bc70f89..5fda57b5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -148,7 +148,7 @@ dependencies = [ [[package]] name = "rmp-ipc" -version = "0.5.0" +version = "0.6.0" dependencies = [ "lazy_static", "log", diff --git a/Cargo.toml b/Cargo.toml index 894b956e..150cbf74 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rmp-ipc" -version = "0.5.0" +version = "0.6.0" authors = ["trivernis "] edition = "2018" readme = "README.md" diff --git a/README.md b/README.md index b9939642..d0843361 100644 --- a/README.md +++ b/README.md @@ -89,10 +89,12 @@ impl MyNamespace { } impl NamespaceProvider for MyNamespace { - fn name() -> String {String::from("my_namespace")} + fn name() -> &'static str {"my_namespace"} fn register(handler: &mut EventHandler) { - handler.on("ping", callback!(Self::ping)) + events!(handler, + "ping" => Self::ping + ); } } diff --git a/src/lib.rs b/src/lib.rs index 0f4f1895..74ce621c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,10 +22,13 @@ //! } //! //! impl NamespaceProvider for MyNamespace { -//! fn name() -> String {String::from("my_namespace")} +//! fn name() -> &'static str {"my_namespace"} //! //! fn register(handler: &mut EventHandler) { -//! handler.on("ping", callback!(Self::ping)) +//! events!(handler, +//! "ping" => Self::ping, +//! "ping2" => Self::ping +//! ); //! } //!} //! diff --git a/src/macros.rs b/src/macros.rs index d0600692..ff15f867 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -17,3 +17,17 @@ macro_rules! namespace { Namespace::from_provider::<$nsp>() }; } + +#[macro_export] +macro_rules! events{ + ($handler:expr, $($name:expr => $cb:ident), *) => { + $( + $handler.on($name, callback!($cb)); + )* + }; + ($handler:expr, $($name:expr => $cb:path), *) => { + $( + $handler.on($name, callback!($cb)); + )* + } +} diff --git a/src/namespaces/provider_trait.rs b/src/namespaces/provider_trait.rs index 8f86f0cb..ce7f1829 100644 --- a/src/namespaces/provider_trait.rs +++ b/src/namespaces/provider_trait.rs @@ -2,7 +2,7 @@ use crate::events::event_handler::EventHandler; use crate::namespace::Namespace; pub trait NamespaceProvider { - fn name() -> String; + fn name() -> &'static str; fn register(handler: &mut EventHandler); } diff --git a/src/tests/ipc_tests.rs b/src/tests/ipc_tests.rs index 9cf39ee1..985ab4a1 100644 --- a/src/tests/ipc_tests.rs +++ b/src/tests/ipc_tests.rs @@ -75,12 +75,15 @@ impl TestNamespace { } impl NamespaceProvider for TestNamespace { - fn name() -> String { - String::from("Test") + fn name() -> &'static str { + "Test" } fn register(handler: &mut EventHandler) { - handler.on("ping", callback!(Self::ping)) + events!(handler, + "ping" => Self::ping, + "ping2" => Self::ping + ); } }