Compare commits
5 Commits
4fde40b11f
...
cda1a8e025
| Author | SHA1 | Date | |
|---|---|---|---|
| cda1a8e025 | |||
| 1b5ebc8bc3 | |||
| 0a0ca87243 | |||
| 4aaa6601c2 | |||
| 2e1231e9d9 |
@ -3,6 +3,6 @@
|
|||||||
Bingo card web application
|
Bingo card web application
|
||||||
|
|
||||||
Backend `Rust` @benjamyn
|
Backend `Rust` @benjamyn
|
||||||
Frontend `TBD` @balgie
|
Frontend `React` @balgie
|
||||||
Docs `MD files` @here
|
Docs `MD files` @here
|
||||||
|
|
||||||
|
|||||||
0
backend/.gitignore
vendored
Normal file
0
backend/.gitignore
vendored
Normal file
@ -6,3 +6,8 @@ edition = "2021"
|
|||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
glob = "0.3.1"
|
||||||
|
serde = { version = "1.0.215", features = ["serde_derive"] }
|
||||||
|
serde_json = "1.0.133"
|
||||||
|
toml = "0.8.19"
|
||||||
|
untildify = "0.1.1"
|
||||||
|
|||||||
18
backend/src/config.rs
Normal file
18
backend/src/config.rs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
use serde::Deserialize;
|
||||||
|
use untildify::untildify;
|
||||||
|
|
||||||
|
use crate::files;
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
pub struct Config {
|
||||||
|
pub config_dir: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Config {
|
||||||
|
pub fn load() -> Config {
|
||||||
|
let config_contents = files::load_file_contents(untildify("~/.config/bingobongo.toml"));
|
||||||
|
let config: Config = toml::from_str(config_contents.as_str()).unwrap();
|
||||||
|
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
}
|
||||||
34
backend/src/files.rs
Normal file
34
backend/src/files.rs
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
use glob::glob;
|
||||||
|
use std::fs::File;
|
||||||
|
use std::io::prelude::*;
|
||||||
|
|
||||||
|
pub fn load_file_contents(file_path: String) -> String {
|
||||||
|
let file = File::open(file_path);
|
||||||
|
match file {
|
||||||
|
Ok(mut f) => {
|
||||||
|
let mut contents = String::new();
|
||||||
|
f.read_to_string(&mut contents).unwrap();
|
||||||
|
return contents;
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
return e.to_string();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn list_files(path: String, extension: String) -> Vec<String> {
|
||||||
|
let mut tmp_path = path.clone();
|
||||||
|
let mut files = Vec::<String>::new();
|
||||||
|
let glob_path = format!("{}/*.{}", tmp_path, extension);
|
||||||
|
// tmp_path.push_str(&glob_path);
|
||||||
|
// println!("{}", glob_path);
|
||||||
|
|
||||||
|
for entry in glob(&glob_path).unwrap() {
|
||||||
|
match entry {
|
||||||
|
Ok(p) => files.push(String::from(p.display().to_string())),
|
||||||
|
Err(e) => return vec![String::new()],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return files;
|
||||||
|
}
|
||||||
@ -1,3 +1,25 @@
|
|||||||
|
mod config;
|
||||||
|
use config::Config;
|
||||||
|
mod files;
|
||||||
|
use files::*;
|
||||||
|
mod structs;
|
||||||
|
use structs::*;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
println!("Hello, world!");
|
let config = Config::load();
|
||||||
|
|
||||||
|
let pool = structs::BingoPool::load_from_file(String::from(
|
||||||
|
"/home/ben/Documents/Projects/rust/BingoBongo/backend/workingdir/pools/testdata.toml",
|
||||||
|
));
|
||||||
|
|
||||||
|
// let pools = BingoPools::load_pools();
|
||||||
|
|
||||||
|
let files = files::list_files(
|
||||||
|
String::from("/home/ben/Documents/Projects/rust/BingoBongo/backend/workingdir/pools"),
|
||||||
|
String::from("toml"),
|
||||||
|
);
|
||||||
|
|
||||||
|
println!("{:?}", files);
|
||||||
|
|
||||||
|
println!("{}", pool);
|
||||||
}
|
}
|
||||||
|
|||||||
87
backend/src/structs.rs
Normal file
87
backend/src/structs.rs
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
use core::fmt;
|
||||||
|
use serde::Deserialize;
|
||||||
|
|
||||||
|
use crate::files;
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
pub struct BingoSquare {
|
||||||
|
option: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl BingoSquare {
|
||||||
|
pub fn new(option: String) -> BingoSquare {
|
||||||
|
BingoSquare { option }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
pub struct Meta {
|
||||||
|
name: String,
|
||||||
|
description: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Meta {
|
||||||
|
pub fn new(name: String, description: String) -> Meta {
|
||||||
|
Meta { name, description }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
pub struct BingoPool {
|
||||||
|
meta: Meta,
|
||||||
|
squares: Vec<BingoSquare>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for BingoPool {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
write!(f, "Name: {}\n", self.meta.name).unwrap();
|
||||||
|
write!(f, "Description: {}\n\n", self.meta.description).unwrap();
|
||||||
|
for square in &self.squares {
|
||||||
|
write!(f, "Square: {}\n", square.option).unwrap();
|
||||||
|
}
|
||||||
|
write!(f, "")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl BingoPool {
|
||||||
|
pub fn new() -> BingoPool {
|
||||||
|
BingoPool {
|
||||||
|
meta: Meta::new(String::from("Meme"), String::from("Funny")),
|
||||||
|
squares: Vec::<BingoSquare>::new(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn load_from_file(file_path: String) -> BingoPool {
|
||||||
|
let file_contents = files::load_file_contents(file_path);
|
||||||
|
let bingopool: BingoPool = toml::from_str(&file_contents).expect("Syntax error in toml");
|
||||||
|
return bingopool;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct BingoPools {
|
||||||
|
pools: Vec<BingoPool>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl BingoPools {
|
||||||
|
pub fn load_pools() -> BingoPools {
|
||||||
|
BingoPools {
|
||||||
|
pools: Vec::<BingoPool>::new(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct BingoBoard {
|
||||||
|
size: i64,
|
||||||
|
squares: Vec<BingoSquare>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl BingoBoard {
|
||||||
|
pub fn new(size: i64) -> BingoBoard {
|
||||||
|
BingoBoard {
|
||||||
|
size: size,
|
||||||
|
squares: Vec::<BingoSquare>::new(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn init(&self) {}
|
||||||
|
}
|
||||||
18
backend/workingdir/pools/testdata.toml
Normal file
18
backend/workingdir/pools/testdata.toml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
[meta]
|
||||||
|
name = 'Name of pool'
|
||||||
|
description = 'Description of pool'
|
||||||
|
|
||||||
|
[[squares]]
|
||||||
|
option = 'First square'
|
||||||
|
|
||||||
|
[[squares]]
|
||||||
|
option = 'Second square'
|
||||||
|
|
||||||
|
[[squares]]
|
||||||
|
option = 'Third square'
|
||||||
|
|
||||||
|
[[squares]]
|
||||||
|
option = 'Fourth square'
|
||||||
|
|
||||||
|
[[squares]]
|
||||||
|
option = 'Fifth square'
|
||||||
BIN
docs/Super_serious_design_docs.kra
Normal file
BIN
docs/Super_serious_design_docs.kra
Normal file
Binary file not shown.
BIN
docs/Super_serious_design_docs.png
Normal file
BIN
docs/Super_serious_design_docs.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 240 KiB |
Loading…
x
Reference in New Issue
Block a user