From 93c09290cddd1f8bebac8a1203f305451cb84434 Mon Sep 17 00:00:00 2001 From: deadvey Date: Thu, 30 Apr 2026 14:53:04 +0100 Subject: [PATCH] Added a character route for requesting character data from the server --- .~lock.report.odt# | 2 +- Cargo.lock | 1 + Cargo.toml | 1 + report.odt | Bin 13093 -> 13812 bytes src/{.main.rs.swp => .api.rs.swp} | Bin 12288 -> 12288 bytes src/.character.rs.swp | Bin 0 -> 12288 bytes src/api.rs | 37 +++++++++++++++---- src/character.rs | 59 ++++++++++++++++++++++++++++++ src/main.rs | 26 ++++++++++--- src/parsing.rs | 13 ++----- stories/characters.json | 23 ++++++++++++ 11 files changed, 139 insertions(+), 23 deletions(-) rename src/{.main.rs.swp => .api.rs.swp} (77%) create mode 100644 src/.character.rs.swp create mode 100644 stories/characters.json diff --git a/.~lock.report.odt# b/.~lock.report.odt# index 1f82241..5578e24 100644 --- a/.~lock.report.odt# +++ b/.~lock.report.odt# @@ -1 +1 @@ -,deadvey,linux-pc,07.04.2026 00:08,file:///home/deadvey/.config/libreoffice/4; \ No newline at end of file +,deadvey,linux-pc,30.04.2026 12:49,file:///home/deadvey/.config/libreoffice/4; \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 58803f2..b5899fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -248,6 +248,7 @@ dependencies = [ "env_logger", "log", "serde", + "serde_json", "tokio", "warp", ] diff --git a/Cargo.toml b/Cargo.toml index 898fe0f..755a3b0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,5 +7,6 @@ edition = "2024" env_logger = "0.11.10" log = "0.4.29" serde = { version = "1.0.228", features = ["derive"] } +serde_json = "1.0.149" tokio = { version = "1.51.0", features = ["rt-multi-thread","macros"] } warp = { version = "0.4.2", features = ["server"] } diff --git a/report.odt b/report.odt index 15a4491885f82b21eaab739796c8bb294fdc1e62..ea7d3612426d6ec5863c549d1bafba70709787ed 100644 GIT binary patch delta 8981 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 RnZk@F|1eT#J7x@00{}KLQ91ws delta 8230 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 ROzrxUkDIEqeK!C}0{{n5l~e!# diff --git a/src/.main.rs.swp b/src/.api.rs.swp similarity index 77% rename from src/.main.rs.swp rename to src/.api.rs.swp index 049d79cc04efa4a365a12bffb64f218cf7235e08..3d6394f0ac40d2af55c594e14b3af4899c47b9f3 100644 GIT binary patch literal 12288 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 diff --git a/src/.character.rs.swp b/src/.character.rs.swp new file mode 100644 index 0000000000000000000000000000000000000000..7741b8f2f31eb1a6bf553500b43e7d8d1a595b3b GIT binary patch literal 12288 zcmYc?2=nw+u+%eRU|?VnU|?7k`#DpxD}=#FjDaB~H8G_uwGt$Q7w2T=l~(8$B;!@Y zz`#%kHBdh}KP6SasI<65KO?cAAT=*DFI~U5C|N%_Be5tkxg@nnuc(-iVWaY+Aut*O z#D_p>Nt&(&FN3j>p#eyfvXY{Luuv$7If_R^U^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q zNC=b^Ff!CLFfcGd{p$&(8PRAcca$0pfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R z7!85Z5Ez0XkeI^2P|v}@u$vPy{}1c`f97Xkc*)Pe@Pwa%;SN6o!#REihC}=e47>Ol z7`E^;Fl^*!VCdjyU?}EiU?}8gU`XO;U zGBBLwWnehP%fPUYmw{myF9XAJUIvC9UIvCdUIqp)UIqqrUIqphUIvDTJPZu`co-NK z@Gvm6^Dr>v@h~ui@Gvmg@Gvl_@Gvm2@-Q$w;bvesz|Fw0jGKXB5jO+Fd~ODYx!ep4 zbGR88YPlI0T(}t+oVXbn6u21}u5vLjEZ|~bn9s$)P|wA{5Xi;ApvA?&@Sl@`;V~xz z!(L8kcn!h$9(D3)2#kinXb6mkz-S1JhQN>xfm#Mm|7;D%qGT(pywq|H-_nxQ3J4Rv zj)I6u$IDy=9#H@>)}NJA|xGbc4ZIX|x?HLs*t zlYuiQwL}47hn0dyVsVCVVu4L?Nl|8Ax{iV~Y>}s(f-M85zP>_mYEfolPG)hcLP=LPoDOe>E z^D=W2OEUBGu*wz`<>%#>=EWDKrsbqo;8l{Dmr{_AJq%%{q@)%QQj(vPm6}|F*P`N5 z+-g!QLAeE2IH#xPrKDnyg1p4sR4awN)be-`3l#I!44jADeU>yd|3~-Ww%OWKNxEL(rV9}2u0gH4D30PEPNWdZ(LjoSHa2ce?gp0wV z5H0|UE`+D5!MVP;q^LBx1S$BHqf=6gGRsmmTtJ1jj)F^SF{D_mO4WgtkX5Ogu?)4= z44jTd$vO<2;DSbnffHJOR;B7Na3X7i7W_I4oN2{644lvsNr$1dI8`CJD6u5f%Bq?H E04>y2oB#j- literal 0 HcmV?d00001 diff --git a/src/api.rs b/src/api.rs index 2eb75eb..5d2e1cf 100644 --- a/src/api.rs +++ b/src/api.rs @@ -1,14 +1,18 @@ -use serde::{Deserialize, Serialize}; use warp::Filter; use crate:: { + // internal code + character, + // libraries + HashMap, Arc, Mutex, config, mpsc::Sender, info, - warn, debug, + Serialize, + Deserialize, }; #[derive(Debug, Deserialize, Serialize, Clone)] @@ -21,29 +25,48 @@ pub struct DataToSend { // Async function that runs the api server in the background. // Waits for the client to load it, at which point it sends a 1 over // tx to allow the program executor to move onto the next bit of code -pub async fn api_process(data_to_send: Arc>, tx: Sender) +pub async fn api_process +( + data_to_send: Arc>, + characters: Arc>>, + tx: Sender, +) { // This data must be passed through to the api route in order to be used let data_filter = warp::any().map(move || Arc::clone(&data_to_send)); + let characters_filter = warp::any().map(move || Arc::clone(&characters)); let tx_filter = warp::any().map(move || tx.clone()); - debug!("Running server"); + info!("Running server"); // The server route is loaded at address:port/happening - let route = warp::path("happening") + let main = warp::path("happening") .and(warp::get()) .and(data_filter) .and(tx_filter) // Perform this code on a GET request - .map(|state: Arc>, tx_handle: Sender| { + .map(|state: Arc>, tx_handle: Sender| + { info!("GET: {:?}", state); let reply = state.as_ref(); let _ = tx_handle.send(1); warp::reply::json(&reply) // Send the reply data (data_to_send formatted as JSON) }).boxed(); + let characters = warp::path("character") + .and(warp::get()) + .and(warp::path::param::()) + .and(characters_filter) + .map(|name: String, characters: Arc>>| + { + let map = characters.lock().unwrap(); // TODO remove unwrap + let reply = map.get(&name).unwrap(); + debug!("GET: name: {}, data: {:?}", name, reply); + warp::reply::json(&reply) + }).boxed(); + let routes = main.or(characters); // Start the server - warp::serve(route) + warp::serve(routes) .run(([127, 0, 0, 1],config::API_PORT)) .await; } diff --git a/src/character.rs b/src/character.rs index 50c2517..dc832a2 100644 --- a/src/character.rs +++ b/src/character.rs @@ -1,6 +1,33 @@ +use crate::{ + HashMap, + fs, + debug, + Deserialize, + Serialize, + Mutex, + Arc, +}; +#[derive(Debug, Deserialize, Serialize)] pub struct Character { name: String, + gender: String, + eye_color: String, + pronoun_subject: String, + pronoun_object: String, + pronoun_deppos: String, + pronoun_indpos: String, + pronoun_reflex: String, + animation: String, + head: String, + hair: String, + torso: String, + arm: String, + leg: String, + hair_color: String, + top_clothing: String, + bottom_clothing: String, + shoes: String, } impl Character { @@ -9,6 +36,38 @@ impl Character Character { name: new_name, + gender: "".to_string(), + eye_color: "".to_string(), + pronoun_subject: "".to_string(), + pronoun_object: "".to_string(), + pronoun_deppos: "".to_string(), + pronoun_indpos: "".to_string(), + pronoun_reflex: "".to_string(), + animation: "".to_string(), + head: "".to_string(), + hair: "".to_string(), + torso: "".to_string(), + arm: "".to_string(), + leg: "".to_string(), + hair_color: "".to_string(), + top_clothing: "".to_string(), + bottom_clothing: "".to_string(), + shoes: "".to_string(), } } } + +pub async fn character_parse() +-> Result>>,String> +{ + // Get the JSON file to a string + let file_contents: String = fs::read_to_string("stories/characters.json") + .unwrap_or_else(|err| { return err.to_string() }); + + // Serialise this to a HashMap + let characters: HashMap = + serde_json::from_str(&file_contents) + .expect("JSON was not well-formatted"); + debug!("{:?}",characters); + Ok(Arc::new(Mutex::new(characters))) +} diff --git a/src/main.rs b/src/main.rs index 3260184..4cd9999 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,6 +10,8 @@ use log:: warn, debug, }; +use serde_json::from_str; +use serde::{Deserialize, Serialize}; mod parsing; mod character; @@ -30,24 +32,33 @@ async fn main() content: "".to_string(), character: "".to_string(), })); + // Setup the characters hashmap which will store each character in it as a Character struct + let mut characters: Arc>> = Default::default(); + match character::character_parse().await + { + Ok(result) => characters = result, //let mut characters = character, + Err(error) => + { + eprintln!("{}",error); + std::process::exit(3); + }, + }; // setup the api stuff // // Make clones of the data Arc for the two processes let data_clone1 = Arc::clone(&data_to_send); + let characters_clone1 = Arc::clone(&characters); let tx_clone = tx.clone(); // Spawn a thread for warp api server tokio::spawn( async move { - api::api_process(data_clone1, tx_clone).await; + api::api_process(data_clone1, characters_clone1, tx_clone).await; }); // setup the parsing stuff // - // Setup the characters hashmap which will store each character in it as a Character struct - let mut characters = HashMap::::new(); - // Read the file and split it into tokens let file_contents: String = fs::read_to_string("stories/story.ha") // TODO make this a command line argument .unwrap_or_else(|err| @@ -58,10 +69,15 @@ async fn main() let tokens: Vec<&str> = file_contents .split_whitespace() .collect(); + if ! tokens.contains(&"END") + { + warn!("No END statement, story may exit unexpectedly"); + } let data_clone2 = Arc::clone(&data_to_send); + let characters_clone2 = Arc::clone(&characters); // Run the parsing process - match parsing::token_parse(&tokens, &mut characters, data_clone2, &rx).await + match parsing::token_parse(&tokens, characters_clone2, data_clone2, &rx).await { // Exit with error or success Ok(()) => diff --git a/src/parsing.rs b/src/parsing.rs index 8c8f3a8..5647891 100644 --- a/src/parsing.rs +++ b/src/parsing.rs @@ -11,7 +11,6 @@ use crate:: Arc, Mutex, info, - warn, debug, }; @@ -20,7 +19,7 @@ use crate:: // Returns success or an error string pub async fn token_parse( tokens: &Vec<&str>, - mut characters: &mut HashMap::, + mut characters: Arc>>, data_to_send: Arc>, rx: &Receiver, ) -> Result<(),String> @@ -43,15 +42,9 @@ pub async fn token_parse( if token.starts_with('@') { let character_name: String = token.chars().skip(1).collect(); - // If the character doesn't exist, then create it - if ! characters.contains_key(&character_name) - { - let new_character = character::Character::new(character_name.clone()); - characters.insert(character_name.clone(),new_character); - } info!("Doing something with a character: {}", character_name); // The index is incremented to after the character's instructions - index += match character_parse(index+1, &tokens, character_name, &mut characters, &data_to_send, &rx).await + index += match character_parse(index+1, &tokens, character_name, &characters, &data_to_send, &rx).await { Ok(increment) => increment, Err(error) => return Err(error), @@ -73,7 +66,7 @@ async fn character_parse index: usize, tokens: &Vec<&str>, character_name: String, - characters: &mut HashMap::, + characters: &Arc>>, data_to_send: &Arc>, rx: &Receiver, ) -> Result diff --git a/stories/characters.json b/stories/characters.json new file mode 100644 index 0000000..a5ec8d4 --- /dev/null +++ b/stories/characters.json @@ -0,0 +1,23 @@ +{ + "tim": { + "name": "Timothy Sharpshooter", + "gender": "", + "skin_color": "", + "eye_color": "", + "pronoun_subject": "", + "pronoun_object": "", + "pronoun_deppos": "", + "pronoun_indpos": "", + "pronoun_reflex": "", + "animation": "", + "head": "", + "hair": "", + "torso": "", + "arm": "", + "leg": "", + "hair_color": "", + "top_clothing": "", + "bottom_clothing": "", + "shoes": "" + } +}