add impls for Arc<dyn View> and Arc<dyn Observer>
This commit is contained in:
parent
ebd11796ad
commit
2da96c5482
2 changed files with 58 additions and 39 deletions
|
@ -59,7 +59,7 @@ async fn main() {
|
|||
|
||||
let view = view_port.outer().get_view();
|
||||
let mut stream = view_port.outer().stream().map({
|
||||
move |_| view.read().unwrap().as_ref().unwrap().view(()).unwrap()
|
||||
move |_| view.view(()).unwrap()
|
||||
});
|
||||
|
||||
let fut = task::spawn({
|
||||
|
|
95
src/view.rs
95
src/view.rs
|
@ -95,6 +95,63 @@ where T: Send + Sync,
|
|||
|
||||
//<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>>
|
||||
|
||||
use std::ops::Deref;
|
||||
use std::sync::{Arc, RwLock};
|
||||
|
||||
impl<T: View> View for RwLock<T> {
|
||||
type Key = T::Key;
|
||||
type Value = T::Value;
|
||||
|
||||
fn view(&self, key: T::Key) -> Option<T::Value> {
|
||||
self.read().unwrap().view(key)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Observer> Observer for RwLock<T> {
|
||||
type Msg = T::Msg;
|
||||
|
||||
fn notify(&self, msg: T::Msg) {
|
||||
self.read().unwrap().notify(msg)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: View> View for Arc<T> {
|
||||
type Key = T::Key;
|
||||
type Value = T::Value;
|
||||
|
||||
fn view(&self, key: T::Key) -> Option<T::Value> {
|
||||
self.deref().view(key)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Observer> Observer for Arc<T> {
|
||||
type Msg = T::Msg;
|
||||
|
||||
fn notify(&self, msg: T::Msg) {
|
||||
self.deref().notify(msg)
|
||||
}
|
||||
}
|
||||
|
||||
impl<K, V> View for Arc<dyn View<Key = K, Value = V>>
|
||||
where K: Send + Sync,
|
||||
V: Send + Sync {
|
||||
type Key = K;
|
||||
type Value = V;
|
||||
|
||||
fn view(&self, key: K) -> Option<V> {
|
||||
self.deref().view(key)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Observer for Arc<dyn Observer<Msg = T>>
|
||||
where T: Send + Sync {
|
||||
type Msg = T;
|
||||
|
||||
fn notify(&self, msg: T) {
|
||||
self.deref().notify(msg)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: View> View for Option<T> {
|
||||
type Key = T::Key;
|
||||
type Value = T::Value;
|
||||
|
@ -118,41 +175,3 @@ impl<T: Observer> Observer for Option<T> {
|
|||
}
|
||||
}
|
||||
|
||||
//<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>>
|
||||
|
||||
impl<T: View> View for std::sync::RwLock<T> {
|
||||
type Key = T::Key;
|
||||
type Value = T::Value;
|
||||
|
||||
fn view(&self, key: T::Key) -> Option<T::Value> {
|
||||
self.read().unwrap().view(key)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Observer> Observer for std::sync::RwLock<T> {
|
||||
type Msg = T::Msg;
|
||||
|
||||
fn notify(&self, msg: T::Msg) {
|
||||
self.read().unwrap().notify(msg)
|
||||
}
|
||||
}
|
||||
|
||||
use std::ops::Deref;
|
||||
|
||||
impl<T: View> View for std::sync::Arc<T> {
|
||||
type Key = T::Key;
|
||||
type Value = T::Value;
|
||||
|
||||
fn view(&self, key: T::Key) -> Option<T::Value> {
|
||||
self.deref().view(key)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Observer> Observer for std::sync::Arc<T> {
|
||||
type Msg = T::Msg;
|
||||
|
||||
fn notify(&self, msg: T::Msg) {
|
||||
self.deref().notify(msg)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue