Added project loading

This commit is contained in:
Maddox Werts 2024-06-21 13:35:31 -04:00
parent eab2096e39
commit 09bfa645ad
4 changed files with 73 additions and 9 deletions

View file

@ -4,3 +4,4 @@ version = "0.1.0"
edition = "2021" edition = "2021"
[dependencies] [dependencies]
serde_json = "1.0"

19
src/data.rs Normal file
View file

@ -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};
}
}

View file

@ -1,4 +1,6 @@
// Libraries // Libraries
mod manager;
mod data;
mod card; mod card;
mod board; mod board;
@ -6,17 +8,18 @@ mod board;
// Entry Point // Entry Point
fn main() { fn main() {
// Create a few new boards // Loading it from a manager
let mut boards: Vec<board::TaskBoard> = Vec::new(); let mut managed: manager::Manager = manager::Manager::init();
managed.parse(String::from("build/data/user.json"));
// Add a board // Printing out the boards
boards.push(board::TaskBoard::init(String::from("New Board"))); println!("-- PROJECT --");
println!("You have {} boards.", managed.boards.len());
// Printing first board for board in managed.boards {
for i in boards { println!("-- {} --", board.name);
println!("Board: {}", i.name); for card in board.cards {
for x in i.cards { println!("\t- {} ({})", card.name, card.desc);
println!("\tCard: {}", x.name);
} }
} }
} }

41
src/manager.rs Normal file
View file

@ -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<board::TaskBoard>
}
// 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<Value> = 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<card::TaskCard> = 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});
}
}
}