backend #4

Merged
benjamyn merged 4 commits from backend into master 2024-11-29 06:15:17 -05:00
7 changed files with 138 additions and 1 deletions
Showing only changes of commit 2e1231e9d9 - Show all commits

0
backend/.gitignore vendored Normal file
View File

View File

@ -6,3 +6,7 @@ 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]
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
View 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
View 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();
}
}
}

View File

@ -1,3 +1,16 @@
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/squares/testdata/testdata.toml",
));
println!("{}", pool);
} }

74
backend/src/structs.rs Normal file
View 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) {}
}

View 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'