backend #4
0
backend/.gitignore
vendored
Normal file
0
backend/.gitignore
vendored
Normal file
@ -6,3 +6,7 @@ edition = "2021"
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
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;
|
||||
}
|
||||
}
|
||||
16
backend/src/files.rs
Normal file
16
backend/src/files.rs
Normal file
@ -0,0 +1,16 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,3 +1,16 @@
|
||||
mod config;
|
||||
use config::Config;
|
||||
mod files;
|
||||
use files::*;
|
||||
mod structs;
|
||||
use structs::*;
|
||||
|
||||
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/squares/testdata/testdata.toml",
|
||||
));
|
||||
|
||||
println!("{}", pool);
|
||||
}
|
||||
|
||||
74
backend/src/structs.rs
Normal file
74
backend/src/structs.rs
Normal file
@ -0,0 +1,74 @@
|
||||
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,
|
||||
reason: String,
|
||||
}
|
||||
|
||||
impl Meta {
|
||||
pub fn new(name: String, reason: String) -> Meta {
|
||||
Meta { name, reason }
|
||||
}
|
||||
}
|
||||
|
||||
#[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();
|
||||
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 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) {}
|
||||
}
|
||||
12
backend/workingdir/squares/testdata/testdata.toml
vendored
Normal file
12
backend/workingdir/squares/testdata/testdata.toml
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
[meta]
|
||||
name = 'Test Bingo'
|
||||
reason = 'Because its fucking funny'
|
||||
|
||||
[[squares]]
|
||||
option = 'This is a test square'
|
||||
|
||||
[[squares]]
|
||||
option = 'This is a second test square'
|
||||
|
||||
[[squares]]
|
||||
option = 'This is a third test square'
|
||||
Loading…
x
Reference in New Issue
Block a user