From 881e4bf3c9141b4bebaefaf6385652ed46d9a9fe Mon Sep 17 00:00:00 2001 From: "Adam T. Carpenter" Date: Wed, 7 Apr 2021 18:54:22 -0400 Subject: added some demo login template, functionality, also added basic kv store test and ui demo --- src/repo/constants.rs | 11 +++++++ src/repo/mod.rs | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 src/repo/constants.rs create mode 100644 src/repo/mod.rs (limited to 'src/repo') diff --git a/src/repo/constants.rs b/src/repo/constants.rs new file mode 100644 index 0000000..e168a77 --- /dev/null +++ b/src/repo/constants.rs @@ -0,0 +1,11 @@ +use once_cell::sync::Lazy; +use sled::{Config, Db}; + +pub const PARTS_TREE: &str = "parts"; +pub const CARS_TREE: &str = "cars"; +pub static REPO_INSTANCE: Lazy = Lazy::new(|| { + Config::default() + .path("/tmp/twinh") + .open() + .expect("Couldn't open DB!") +}); diff --git a/src/repo/mod.rs b/src/repo/mod.rs new file mode 100644 index 0000000..d4c5e44 --- /dev/null +++ b/src/repo/mod.rs @@ -0,0 +1,80 @@ +use crate::error::TwinHError; +use crate::models::Car; +use crate::models::Part; +use bincode::deserialize; +use constants::*; + +mod constants; + +pub fn create_new_db() -> Result<(), TwinHError> { + let config = sled::Config::default() + .path("/var/db/twinh") + .create_new(true); + let db = config.open()?; + Ok(()) +} + +pub fn get_all_cars() -> Result, TwinHError> { + let cars = REPO_INSTANCE + .open_tree(CARS_TREE)? + .into_iter() + .values() + .collect::, _>>()? + .iter() + .map(|c| deserialize::(&c)) + .collect::, _>>()?; + Ok(cars) +} + +pub fn insert_part(part: Part) -> Result { + todo!() +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::models::{Car, Part}; + use bincode::serialize; + use std::error::Error; + + #[test] + fn test_insert_part() -> Result<(), Box> { + let db = sled::Config::default() + .mode(sled::Mode::HighThroughput) + .temporary(true) + .open()?; + + let car = Car { + key: 1, + make: "Hudson".into(), + model: "Hornet".into(), + trim: "Sedan".into(), + doors: 4, + year: 1953, + }; + + let tree = db.open_tree(CARS_TREE)?; + let key = car.key.to_be_bytes(); + let val = serialize(&car)?; + tree.insert(key, val)?; + + let part = Part { + key: 2, + number: "ABC123".into(), + name: "Rear Wheel Bearing".into(), + fits_cars: vec![car.key], + categories: Vec::new(), + sources: Vec::new(), + }; + + let tree = db.open_tree(PARTS_TREE)?; + let (key, val) = (serialize(&part.key)?, serialize(&part)?); + tree.insert(key.clone(), val)?; + + let part_out = tree.get(key)?; + let part_out = deserialize::(&part_out.unwrap())?; + assert_eq!(part.key, part_out.key); + + Ok(()) + } +} -- cgit v1.2.3