implemented observable types for live updates
This commit is contained in:
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -3,5 +3,5 @@
|
|||||||
version = 3
|
version = 3
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "docki-cli"
|
name = "docki"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
mod commands;
|
mod commands;
|
||||||
pub mod builder;
|
pub mod builder;
|
||||||
|
pub mod rx;
|
||||||
|
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
|||||||
24
src/app/rx/mod.rs
Normal file
24
src/app/rx/mod.rs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
type Subscriber<T> = fn(value: T) -> ();
|
||||||
|
|
||||||
|
pub struct Observable<T: Copy> {
|
||||||
|
subscriber: Vec<Subscriber<T>>
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Copy> Observable<T> {
|
||||||
|
|
||||||
|
pub fn new() -> Observable<T> {
|
||||||
|
return Observable {
|
||||||
|
subscriber: Vec::new(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn next(&self, value: T) {
|
||||||
|
for callback in &self.subscriber {
|
||||||
|
callback(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn subscribe(&mut self, subscriber: Subscriber<T>) {
|
||||||
|
self.subscriber.push(subscriber);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,8 @@
|
|||||||
mod app;
|
mod app;
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test;
|
||||||
|
|
||||||
use std::env;
|
use std::env;
|
||||||
|
|
||||||
use app::App;
|
use app::App;
|
||||||
|
|||||||
13
src/test/mod.rs
Normal file
13
src/test/mod.rs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
use crate::app::rx::Observable;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_observable() {
|
||||||
|
let mut observable: Observable<u32> = Observable::new();
|
||||||
|
|
||||||
|
observable.subscribe(|value| {
|
||||||
|
assert_eq!(5, value);
|
||||||
|
});
|
||||||
|
|
||||||
|
observable.next(5);
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user