From e8332ee0930dfbe46cb3848aeabbf8bc434f617c Mon Sep 17 00:00:00 2001 From: Akbar Rahman Date: Thu, 21 Dec 2023 14:18:49 +0000 Subject: [PATCH] create structs to model habit tracking data --- Cargo.toml | 1 + src/lib.rs | 11 +---------- src/models.rs | 9 +++++++++ src/models/category.rs | 22 ++++++++++++++++++++++ src/models/series.rs | 27 +++++++++++++++++++++++++++ src/models/series_point.rs | 19 +++++++++++++++++++ src/models/series_type.rs | 7 +++++++ 7 files changed, 86 insertions(+), 10 deletions(-) create mode 100644 src/models.rs create mode 100644 src/models/category.rs create mode 100644 src/models/series.rs create mode 100644 src/models/series_point.rs create mode 100644 src/models/series_type.rs diff --git a/Cargo.toml b/Cargo.toml index 25f4796..8c6eecb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ default = ["console_error_panic_hook"] [dependencies] wasm-bindgen = "0.2.84" +chrono = { version = "0.4.31", features = [ "clock" ] } # The `console_error_panic_hook` crate provides better debugging of panics by # logging them with `console.error`. This is great for development, but requires diff --git a/src/lib.rs b/src/lib.rs index 8aad5ad..16bcb9b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,13 +1,4 @@ mod utils; +pub mod models; use wasm_bindgen::prelude::*; - -#[wasm_bindgen] -extern "C" { - fn alert(s: &str); -} - -#[wasm_bindgen] -pub fn greet() { - alert("Hello, rabbit!"); -} diff --git a/src/models.rs b/src/models.rs new file mode 100644 index 0000000..55eb925 --- /dev/null +++ b/src/models.rs @@ -0,0 +1,9 @@ +pub mod category; +pub mod series; +pub mod series_point; +pub mod series_type; + +pub use category::*; +pub use series::*; +pub use series_point::*; +pub use series_type::*; diff --git a/src/models/category.rs b/src/models/category.rs new file mode 100644 index 0000000..fb0c245 --- /dev/null +++ b/src/models/category.rs @@ -0,0 +1,22 @@ +use crate::models::Series; + +#[derive(Debug)] +pub struct Category { + id: i32, + name: String, + series: Vec, +} + +impl Category { + pub fn new(id: i32, name: String) -> Category { + Category { + id, + name, + series: vec![], + } + } + + pub fn add_series(&mut self, series: Series) { + self.series.push(series); + } +} diff --git a/src/models/series.rs b/src/models/series.rs new file mode 100644 index 0000000..1c61d88 --- /dev/null +++ b/src/models/series.rs @@ -0,0 +1,27 @@ +use chrono; +use super::series_point::SeriesPoint; + +#[derive(Debug)] +pub struct Series { + id: i32, + name: String, + repeat: chrono::Duration, + good: bool, + points: Vec, +} + +impl Series { + pub fn new(id: i32, name: String, repeat: chrono::Duration, good: bool) -> Series { + Series { + id, + name, + repeat, + good, + points: vec![], + } + } + + pub fn add_point(&mut self, point: SeriesPoint) { + self.points.push(point); + } +} diff --git a/src/models/series_point.rs b/src/models/series_point.rs new file mode 100644 index 0000000..55bfbd7 --- /dev/null +++ b/src/models/series_point.rs @@ -0,0 +1,19 @@ +use chrono; +use super::series_type::SeriesType; + +#[derive(Debug)] +pub struct SeriesPoint { + id: i32, + timestamp: chrono::NaiveDateTime, + value: SeriesType, +} + +impl SeriesPoint { + pub fn new(id: i32, timestamp: chrono::NaiveDateTime, value: SeriesType) -> SeriesPoint { + SeriesPoint { + id, + timestamp, + value + } + } +} diff --git a/src/models/series_type.rs b/src/models/series_type.rs new file mode 100644 index 0000000..26a13be --- /dev/null +++ b/src/models/series_type.rs @@ -0,0 +1,7 @@ +#[derive(Debug)] +pub enum SeriesType { + Bool(bool), + Count(u32), + Signed(i32), + Float(f32), +}