Merge pull request #37 from Trivernis/develop

Switch from typemap_rev to trait-bound-typemap for context data
main
Julius Riegel 2 years ago committed by GitHub
commit 7efe85345c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

20
Cargo.lock generated

@ -93,7 +93,7 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]] [[package]]
name = "bromine" name = "bromine"
version = "0.18.2" version = "0.19.0"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"bincode", "bincode",
@ -111,7 +111,7 @@ dependencies = [
"thiserror", "thiserror",
"tokio", "tokio",
"tracing", "tracing",
"typemap_rev", "trait-bound-typemap",
] ]
[[package]] [[package]]
@ -538,6 +538,12 @@ dependencies = [
"winapi", "winapi",
] ]
[[package]]
name = "multi-trait-object"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a54c9ed2b86c7927b63e7d51f8d7ed4e1f8513c8672828ca1a850ff9d32ab1c"
[[package]] [[package]]
name = "nb" name = "nb"
version = "0.1.3" version = "0.1.3"
@ -1035,9 +1041,13 @@ dependencies = [
] ]
[[package]] [[package]]
name = "typemap_rev" name = "trait-bound-typemap"
version = "0.1.5" version = "0.3.3"
source = "git+https://github.com/Trivernis/typemap_rev?rev=750c67bffe8024d2a47725daa473f068ad653fc4#750c67bffe8024d2a47725daa473f068ad653fc4" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3631df5ba73c0e41b1aa337df3bcca7f15219f042f8fec1100857bc1eb60c767"
dependencies = [
"multi-trait-object",
]
[[package]] [[package]]
name = "unicode-width" name = "unicode-width"

@ -1,6 +1,6 @@
[package] [package]
name = "bromine" name = "bromine"
version = "0.18.3" version = "0.19.0"
authors = ["trivernis <trivernis@protonmail.com>"] authors = ["trivernis <trivernis@protonmail.com>"]
edition = "2018" edition = "2018"
readme = "README.md" readme = "README.md"
@ -27,15 +27,11 @@ byteorder = "1.4.3"
async-trait = "0.1.52" async-trait = "0.1.52"
num_enum = "0.5.7" num_enum = "0.5.7"
futures-core = "0.3.21" futures-core = "0.3.21"
trait-bound-typemap = "0.3.3"
rmp-serde = { version = "1.0.0", optional = true } rmp-serde = { version = "1.0.0", optional = true }
bincode = { version = "1.3.3", optional = true } bincode = { version = "1.3.3", optional = true }
serde_json = { version = "1.0.79", optional = true } serde_json = { version = "1.0.79", optional = true }
[dependencies.typemap_rev]
version = "0.1.5"
git = "https://github.com/Trivernis/typemap_rev"
rev = "750c67bffe8024d2a47725daa473f068ad653fc4"
[dependencies.serde] [dependencies.serde]
optional = true optional = true
version = "1.0.136" version = "1.0.136"

@ -12,19 +12,18 @@ use crate::namespaces::namespace::Namespace;
#[cfg(feature = "serialize")] #[cfg(feature = "serialize")]
use crate::payload::DynamicSerializer; use crate::payload::DynamicSerializer;
use crate::protocol::AsyncStreamProtocolListener; use crate::protocol::AsyncStreamProtocolListener;
use std::any::{Any, TypeId};
use std::collections::HashMap; use std::collections::HashMap;
use std::future::Future; use std::future::Future;
use std::pin::Pin; use std::pin::Pin;
use std::sync::Arc; use std::sync::Arc;
use std::time::Duration; use std::time::Duration;
use tokio::sync::RwLock; use tokio::sync::RwLock;
use typemap_rev::{TypeMap, TypeMapKey}; use trait_bound_typemap::{KeyCanExtend, SendSyncTypeMap, TypeMap, TypeMapEntry, TypeMapKey};
/// A builder for the IPC server or client. /// A builder for the IPC server or client.
/// ```no_run /// ```no_run
/// use std::net::ToSocketAddrs; /// use std::net::ToSocketAddrs;
/// use typemap_rev::TypeMapKey; /// use trait_bound_typemap::TypeMapKey;
/// use bromine::IPCBuilder; /// use bromine::IPCBuilder;
/// use tokio::net::TcpListener; /// use tokio::net::TcpListener;
/// use bromine::prelude::Response; /// use bromine::prelude::Response;
@ -61,7 +60,7 @@ pub struct IPCBuilder<L: AsyncStreamProtocolListener> {
handler: EventHandler, handler: EventHandler,
address: Option<L::AddressType>, address: Option<L::AddressType>,
namespaces: HashMap<String, Namespace>, namespaces: HashMap<String, Namespace>,
data: TypeMap, data: SendSyncTypeMap,
timeout: Duration, timeout: Duration,
#[cfg(feature = "serialize")] #[cfg(feature = "serialize")]
default_serializer: DynamicSerializer, default_serializer: DynamicSerializer,
@ -86,7 +85,7 @@ where
handler, handler,
address: None, address: None,
namespaces: HashMap::new(), namespaces: HashMap::new(),
data: TypeMap::new(), data: SendSyncTypeMap::new(),
timeout: Duration::from_secs(60), timeout: Duration::from_secs(60),
#[cfg(feature = "serialize")] #[cfg(feature = "serialize")]
default_serializer: DynamicSerializer::first_available(), default_serializer: DynamicSerializer::first_available(),
@ -94,14 +93,17 @@ where
} }
/// Adds globally shared data /// Adds globally shared data
pub fn insert<K: TypeMapKey>(mut self, value: K::Value) -> Self { pub fn insert<K: TypeMapKey>(mut self, value: K::Value) -> Self
where
<K as TypeMapKey>::Value: Send + Sync,
{
self.data.insert::<K>(value); self.data.insert::<K>(value);
self self
} }
/// Adds all the data from the other given type map /// Adds all the data from the other given type map
pub fn insert_all<I: IntoIterator<Item = (TypeId, Box<dyn Any + Send + Sync>)>>( pub fn insert_all<I: IntoIterator<Item = TypeMapEntry<K>>, K: KeyCanExtend<SendSyncTypeMap>>(
mut self, mut self,
value: I, value: I,
) -> Self { ) -> Self {

@ -10,7 +10,7 @@ use std::sync::Arc;
use std::time::Duration; use std::time::Duration;
use tokio::sync::oneshot; use tokio::sync::oneshot;
use tokio::sync::RwLock; use tokio::sync::RwLock;
use typemap_rev::TypeMap; use trait_bound_typemap::SendSyncTypeMap;
#[cfg(feature = "serialize")] #[cfg(feature = "serialize")]
use crate::payload::DynamicSerializer; use crate::payload::DynamicSerializer;
@ -22,7 +22,7 @@ use crate::payload::DynamicSerializer;
pub struct IPCClient { pub struct IPCClient {
pub(crate) handler: EventHandler, pub(crate) handler: EventHandler,
pub(crate) namespaces: HashMap<String, Namespace>, pub(crate) namespaces: HashMap<String, Namespace>,
pub(crate) data: Arc<RwLock<TypeMap>>, pub(crate) data: Arc<RwLock<SendSyncTypeMap>>,
pub(crate) reply_listeners: ReplyListeners, pub(crate) reply_listeners: ReplyListeners,
pub(crate) timeout: Duration, pub(crate) timeout: Duration,

@ -7,7 +7,7 @@ use std::sync::Arc;
use tokio::sync::mpsc::Receiver; use tokio::sync::mpsc::Receiver;
use tokio::sync::{mpsc, oneshot, Mutex, RwLock}; use tokio::sync::{mpsc, oneshot, Mutex, RwLock};
use tokio::time::Duration; use tokio::time::Duration;
use typemap_rev::TypeMap; use trait_bound_typemap::SendSyncTypeMap;
use crate::error::{Error, Result}; use crate::error::{Error, Result};
use crate::event::{Event, EventType}; use crate::event::{Event, EventType};
@ -38,7 +38,7 @@ pub struct Context {
emitter: StreamEmitter, emitter: StreamEmitter,
/// Field to store additional context data /// Field to store additional context data
pub data: Arc<RwLock<TypeMap>>, pub data: Arc<RwLock<SendSyncTypeMap>>,
stop_sender: Arc<Mutex<Option<oneshot::Sender<()>>>>, stop_sender: Arc<Mutex<Option<oneshot::Sender<()>>>>,
@ -55,7 +55,7 @@ pub struct Context {
impl Context { impl Context {
pub(crate) fn new( pub(crate) fn new(
emitter: StreamEmitter, emitter: StreamEmitter,
data: Arc<RwLock<TypeMap>>, data: Arc<RwLock<SendSyncTypeMap>>,
stop_sender: Option<oneshot::Sender<()>>, stop_sender: Option<oneshot::Sender<()>>,
reply_listeners: ReplyListeners, reply_listeners: ReplyListeners,
reply_timeout: Duration, reply_timeout: Duration,

@ -13,7 +13,7 @@ use std::collections::HashMap;
use std::sync::Arc; use std::sync::Arc;
use std::time::Duration; use std::time::Duration;
use tokio::sync::RwLock; use tokio::sync::RwLock;
use typemap_rev::TypeMap; use trait_bound_typemap::SendSyncTypeMap;
/// The IPC Server listening for connections. /// The IPC Server listening for connections.
/// Use the [IPCBuilder](crate::builder::IPCBuilder) to create a server. /// Use the [IPCBuilder](crate::builder::IPCBuilder) to create a server.
@ -21,7 +21,7 @@ use typemap_rev::TypeMap;
pub struct IPCServer { pub struct IPCServer {
pub(crate) handler: EventHandler, pub(crate) handler: EventHandler,
pub(crate) namespaces: HashMap<String, Namespace>, pub(crate) namespaces: HashMap<String, Namespace>,
pub(crate) data: TypeMap, pub(crate) data: SendSyncTypeMap,
pub(crate) timeout: Duration, pub(crate) timeout: Duration,
#[cfg(feature = "serialize")] #[cfg(feature = "serialize")]

@ -61,7 +61,7 @@
//! Server Example: //! Server Example:
//! ```no_run //! ```no_run
//! use std::net::ToSocketAddrs; //! use std::net::ToSocketAddrs;
//! use typemap_rev::TypeMapKey; //! use trait_bound_typemap::{TypeMapKey, TypeMap};
//! use bromine::IPCBuilder; //! use bromine::IPCBuilder;
//! use bromine::prelude::*; //! use bromine::prelude::*;
//! use tokio::net::TcpListener; //! use tokio::net::TcpListener;

@ -4,7 +4,7 @@ use std::collections::HashMap;
use std::sync::atomic::{AtomicUsize, Ordering}; use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::Arc; use std::sync::Arc;
use tokio::sync::RwLock; use tokio::sync::RwLock;
use typemap_rev::TypeMapKey; use trait_bound_typemap::{TypeMap, TypeMapKey};
pub async fn get_counter_from_context(ctx: &Context) -> CallCounter { pub async fn get_counter_from_context(ctx: &Context) -> CallCounter {
let data = ctx.data.read().await; let data = ctx.data.read().await;

Loading…
Cancel
Save