From 09bfa645ad0ece03938904622baf8bd156cecf0a Mon Sep 17 00:00:00 2001 From: OBJNULL Date: Fri, 21 Jun 2024 13:35:31 -0400 Subject: [PATCH] Added project loading --- Cargo.toml | 1 + src/data.rs | 19 +++++++++++++++++++ src/main.rs | 21 ++++++++++++--------- src/manager.rs | 41 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 73 insertions(+), 9 deletions(-) create mode 100644 src/data.rs create mode 100644 src/manager.rs diff --git a/Cargo.toml b/Cargo.toml index 1cf0735..720b2ca 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,3 +4,4 @@ version = "0.1.0" edition = "2021" [dependencies] +serde_json = "1.0" diff --git a/src/data.rs b/src/data.rs new file mode 100644 index 0000000..12abe78 --- /dev/null +++ b/src/data.rs @@ -0,0 +1,19 @@ +// Libraries +use std::fs; +use serde_json::*; + +// Structures +pub struct Data { + pub content: String +} + +// Implementations +impl Data { + pub fn init(path: String) -> Data{ + // Loading the data from path + let content: String = fs::read_to_string(path).expect("Failed to read file"); + + // Returning the result + return Data {content: content}; + } +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 55bb8a6..f9041e7 100755 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,6 @@ // Libraries +mod manager; +mod data; mod card; mod board; @@ -6,17 +8,18 @@ mod board; // Entry Point fn main() { - // Create a few new boards - let mut boards: Vec = Vec::new(); + // Loading it from a manager + let mut managed: manager::Manager = manager::Manager::init(); + managed.parse(String::from("build/data/user.json")); - // Add a board - boards.push(board::TaskBoard::init(String::from("New Board"))); + // Printing out the boards + println!("-- PROJECT --"); + println!("You have {} boards.", managed.boards.len()); - // Printing first board - for i in boards { - println!("Board: {}", i.name); - for x in i.cards { - println!("\tCard: {}", x.name); + for board in managed.boards { + println!("-- {} --", board.name); + for card in board.cards { + println!("\t- {} ({})", card.name, card.desc); } } } \ No newline at end of file diff --git a/src/manager.rs b/src/manager.rs new file mode 100644 index 0000000..0b4d676 --- /dev/null +++ b/src/manager.rs @@ -0,0 +1,41 @@ +// Libraries +use serde_json::{self, Value}; +use crate::board; +use crate::card; +use crate::data; + +// Structures +pub struct Manager{ + pub boards: Vec +} + +// Implementations +impl Manager{ + pub fn init() -> Manager { + return Manager {boards: vec![]}; + } + pub fn parse(&mut self, path: String){ + // Loading a data object from the path + let loaded: data::Data = data::Data::init(path); + + // Parsing the JSON + let parsed: Vec = serde_json::from_str(&loaded.content).expect("Failed to parse JSON"); + + // Going through all boards + for item in parsed { + // A list of cards + let mut cards: Vec = vec![]; + + // Init cards + for task in item["cards"].as_array().unwrap() { + let _name: String = String::from(task["name"].as_str().unwrap()); + let _desc: String = String::from(task["desc"].as_str().unwrap()); + + cards.push(card::TaskCard::init_val(_name, _desc)); + } + + // Creating the boards inside the manager + self.boards.push(board::TaskBoard {name: String::from(item["name"].as_str().expect("Failed to parse string")), cards: cards}); + } + } +} \ No newline at end of file