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"
[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
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<board::TaskBoard> = 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);
}
}
}

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