From 1667e14d647bc74ade3e703805e499446decf42b Mon Sep 17 00:00:00 2001 From: Mossfet Date: Fri, 30 Jun 2023 17:47:25 +0100 Subject: [PATCH] Initial json parsing --- .gitignore | 1 + src/main.rs | 6 ++---- src/names.rs | 30 +++++++++++++++++++++++++++++- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index ea8c4bf..a2a1b8a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +names.json diff --git a/src/main.rs b/src/main.rs index 7e7c302..5d9e7c9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,10 +10,8 @@ use names::Site; #[launch] fn rocket() -> _ { - let names = vec![ - Site::new("mossfet.xyz", Some("Mossy's site")), - Site::new("fries.gay", Some("Fries's site")) - ]; + let names_file = std::fs::File::open("names.json").unwrap(); + let names = names::load_names(names_file).unwrap(); rocket::build() .manage(names) .mount( diff --git a/src/names.rs b/src/names.rs index 0ce6c83..fbc39b4 100644 --- a/src/names.rs +++ b/src/names.rs @@ -1,6 +1,8 @@ use std::fs::File; use std::io::{BufReader, Read}; +use serde_json::{Map, Value}; +#[derive(Debug)] pub enum NamesError { FileAccessError, ParseError, @@ -8,13 +10,39 @@ pub enum NamesError { pub fn load_names(names_file: File) -> Result, NamesError> { let mut buf_reader = BufReader::new(names_file); + let mut output: Vec = vec![]; let mut contents = String::new(); match buf_reader.read_to_string(&mut contents) { Ok(_) => {}, Err(_) => {return Err(NamesError::FileAccessError)}, } + println!("{}", contents); - Err(NamesError::ParseError) + + match serde_json::from_str(&contents) { + Ok(Value::Array(sites_array)) => { + for i in sites_array { + match i { + Value::Object(site) => { + let url = site.get("url"); + let name = site.get("name"); + match (url, name) { + (Some(Value::String(url)), Some(Value::String(name))) => { + output.push(Site::new(url, Some(name))); + }, + (Some(Value::String(url)), None) => { + output.push(Site::new(url, None)); + }, + _ => {return Err(NamesError::ParseError)}, + }; + } + _ => {return Err(NamesError::ParseError)} + } + } + } + _ => {return Err(NamesError::ParseError)} + } + Ok(output) } pub struct Site {