diff --git a/Cargo.lock b/Cargo.lock index ce558d8d..5754d327 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -93,7 +93,7 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bromine" -version = "0.15.0" +version = "0.15.1" dependencies = [ "async-trait", "bincode", diff --git a/Cargo.toml b/Cargo.toml index 1a0be446..7eb91762 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bromine" -version = "0.15.0" +version = "0.15.1" authors = ["trivernis "] edition = "2018" readme = "README.md" diff --git a/src/events/payload.rs b/src/events/payload.rs index 77bc6d65..9c62c05f 100644 --- a/src/events/payload.rs +++ b/src/events/payload.rs @@ -122,6 +122,7 @@ impl EventSendPayload for () { #[cfg(feature = "serialize")] mod serde_payload { use super::DynamicSerializer; + use crate::context::Context; use crate::payload::EventReceivePayload; use crate::prelude::{EventSendPayload, IPCResult}; use byteorder::ReadBytesExt; @@ -185,6 +186,14 @@ mod serde_payload { Ok(Self { serializer, data }) } } + + pub trait IntoSerdePayload: Sized { + fn into_serde_payload(self, ctx: &Context) -> SerdePayload { + ctx.create_serde_payload(self) + } + } + + impl IntoSerdePayload for T where T: Serialize {} } #[cfg(feature = "serialize")] diff --git a/src/ipc/context.rs b/src/ipc/context.rs index eb8af95d..5f42f22f 100644 --- a/src/ipc/context.rs +++ b/src/ipc/context.rs @@ -3,8 +3,6 @@ use crate::event::Event; use crate::ipc::stream_emitter::StreamEmitter; use futures::future; use futures::future::Either; -#[cfg(feature = "serialize")] -use serde::Serialize; use std::collections::HashMap; use std::mem; use std::ops::{Deref, DerefMut}; @@ -108,7 +106,7 @@ impl Context { } #[cfg(feature = "serialize")] - pub fn create_serde_payload(&self, data: T) -> SerdePayload { + pub fn create_serde_payload(&self, data: T) -> SerdePayload { SerdePayload::new(self.default_serializer.clone(), data) } diff --git a/tests/test_events_with_payload.rs b/tests/test_events_with_payload.rs index 5eaddafc..64bde1fc 100644 --- a/tests/test_events_with_payload.rs +++ b/tests/test_events_with_payload.rs @@ -17,7 +17,7 @@ async fn it_sends_payloads() { string: String::from("Hello World"), }; #[cfg(feature = "serialize")] - let payload = ctx.create_serde_payload(payload); + let payload = payload.into_serde_payload(&ctx); ctx.emitter.emit("ping", payload).await.unwrap(); @@ -39,7 +39,7 @@ async fn it_receives_payloads() { string: String::from("Hello World"), }; #[cfg(feature = "serialize")] - let payload = ctx.create_serde_payload(payload); + let payload = payload.into_serde_payload(&ctx); let reply = ctx .emitter @@ -80,7 +80,7 @@ async fn handle_ping_event(ctx: &Context, event: Event) -> IPCResult<()> { #[cfg(feature = "serialize")] { ctx.emitter - .emit_response(event.id(), "pong", ctx.create_serde_payload(payload)) + .emit_response(event.id(), "pong", payload.into_serde_payload(&ctx)) .await?; } #[cfg(not(feature = "serialize"))]