diff options
| author | acdenisSK <[email protected]> | 2017-08-24 15:26:49 +0200 |
|---|---|---|
| committer | acdenisSK <[email protected]> | 2017-08-24 16:36:01 +0200 |
| commit | b3a5bc89ad1c09290fb1c15ca3b36fe17c3796f3 (patch) | |
| tree | 315e16f7b252d22b5f832302e722a85c9e6a9b6e /src/internal | |
| parent | Allow FromStr for User to use REST (#147) (diff) | |
| download | serenity-b3a5bc89ad1c09290fb1c15ca3b36fe17c3796f3.tar.xz serenity-b3a5bc89ad1c09290fb1c15ca3b36fe17c3796f3.zip | |
Revamp `RwLock` usage in the lib
Also not quite sure if they goofed rustfmt or something, but its changes it did were a bit bizarre.
Diffstat (limited to 'src/internal')
| -rw-r--r-- | src/internal/mod.rs | 4 | ||||
| -rw-r--r-- | src/internal/rwlock_ext.rs | 18 | ||||
| -rw-r--r-- | src/internal/ws_impl.rs | 8 |
3 files changed, 26 insertions, 4 deletions
diff --git a/src/internal/mod.rs b/src/internal/mod.rs index 2ff8067..a0c8142 100644 --- a/src/internal/mod.rs +++ b/src/internal/mod.rs @@ -3,6 +3,10 @@ pub mod macros; pub mod prelude; +mod rwlock_ext; + +pub use self::rwlock_ext::RwLockExt; + #[cfg(feature = "gateway")] pub mod ws_impl; diff --git a/src/internal/rwlock_ext.rs b/src/internal/rwlock_ext.rs new file mode 100644 index 0000000..8266cdf --- /dev/null +++ b/src/internal/rwlock_ext.rs @@ -0,0 +1,18 @@ +use std::sync::{Arc, RwLock}; + +pub trait RwLockExt<T> { + fn with<Y, F: Fn(&T) -> Y>(&self, f: F) -> Y; + fn with_mut<Y, F: FnMut(&mut T) -> Y>(&self, f: F) -> Y; +} + +impl<T> RwLockExt<T> for Arc<RwLock<T>> { + fn with<Y, F: Fn(&T) -> Y>(&self, f: F) -> Y { + let r = self.read().unwrap(); + f(&r) + } + + fn with_mut<Y, F: FnMut(&mut T) -> Y>(&self, mut f: F) -> Y { + let mut w = self.write().unwrap(); + f(&mut w) + } +} diff --git a/src/internal/ws_impl.rs b/src/internal/ws_impl.rs index cd9161a..70c4cb7 100644 --- a/src/internal/ws_impl.rs +++ b/src/internal/ws_impl.rs @@ -7,7 +7,8 @@ use gateway::GatewayError; use internal::prelude::*; pub trait ReceiverExt { - fn recv_json<F, T>(&mut self, decode: F) -> Result<T> where F: Fn(Value) -> Result<T>; + fn recv_json<F, T>(&mut self, decode: F) -> Result<T> + where F: Fn(Value) -> Result<T>; } pub trait SenderExt { @@ -42,9 +43,8 @@ impl ReceiverExt for WsClient<TlsStream<TcpStream>> { })) }, OwnedMessage::Ping(x) => { - self.send_message(&OwnedMessage::Pong(x)).map_err( - Error::from, - )?; + self.send_message(&OwnedMessage::Pong(x)) + .map_err(Error::from)?; None }, |