From f76521f6cfcca683adc3e781e40f161c8d605c0a Mon Sep 17 00:00:00 2001 From: quirinecker Date: Tue, 24 Jan 2023 02:25:09 +0100 Subject: [PATCH] implemented observable types for live updates --- Cargo.lock | 2 +- src/app/mod.rs | 1 + src/app/rx/mod.rs | 24 ++++++++++++++++++++++++ src/main.rs | 3 +++ src/test/mod.rs | 13 +++++++++++++ 5 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 src/app/rx/mod.rs create mode 100644 src/test/mod.rs diff --git a/Cargo.lock b/Cargo.lock index 158cf5d..0c53655 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,5 +3,5 @@ version = 3 [[package]] -name = "docki-cli" +name = "docki" version = "0.1.0" diff --git a/src/app/mod.rs b/src/app/mod.rs index c8212e7..1452ddf 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -1,5 +1,6 @@ mod commands; pub mod builder; +pub mod rx; use std::collections::HashMap; diff --git a/src/app/rx/mod.rs b/src/app/rx/mod.rs new file mode 100644 index 0000000..6b68012 --- /dev/null +++ b/src/app/rx/mod.rs @@ -0,0 +1,24 @@ +type Subscriber = fn(value: T) -> (); + +pub struct Observable { + subscriber: Vec> +} + +impl Observable { + + pub fn new() -> Observable { + 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) { + self.subscriber.push(subscriber); + } +} diff --git a/src/main.rs b/src/main.rs index 11311b0..a5101bc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,8 @@ mod app; +#[cfg(test)] +mod test; + use std::env; use app::App; diff --git a/src/test/mod.rs b/src/test/mod.rs new file mode 100644 index 0000000..26d541e --- /dev/null +++ b/src/test/mod.rs @@ -0,0 +1,13 @@ +use crate::app::rx::Observable; + +#[test] +fn test_observable() { + let mut observable: Observable = Observable::new(); + + observable.subscribe(|value| { + assert_eq!(5, value); + }); + + observable.next(5); +} +