implemented observable types for live updates

This commit is contained in:
2023-01-24 02:25:09 +01:00
parent 5e8c00d819
commit f76521f6cf
5 changed files with 42 additions and 1 deletions

2
Cargo.lock generated
View File

@@ -3,5 +3,5 @@
version = 3
[[package]]
name = "docki-cli"
name = "docki"
version = "0.1.0"

View File

@@ -1,5 +1,6 @@
mod commands;
pub mod builder;
pub mod rx;
use std::collections::HashMap;

24
src/app/rx/mod.rs Normal file
View 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);
}
}

View File

@@ -1,5 +1,8 @@
mod app;
#[cfg(test)]
mod test;
use std::env;
use app::App;

13
src/test/mod.rs Normal file
View 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);
}