From 5c071f08f14df1b9380206a182796b2436057e33 Mon Sep 17 00:00:00 2001 From: Valmo Trindade Date: Sat, 21 Sep 2024 03:59:07 -0300 Subject: [PATCH] added async post marker function --- src/commands.rs | 20 ++++++++++---------- src/util.rs | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 10 deletions(-) diff --git a/src/commands.rs b/src/commands.rs index 2554d52..3837622 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -11,12 +11,10 @@ pub fn get_auth_token(login_payload: LoginPayload) -> String { } pub(crate) mod markers { + use crate::{structs::Marker, util::{async_post_markers, parse_marker_to_payload}}; use log::{error, info}; - - use crate::{ - structs::Marker, - util::parse_marker_to_payload, - }; + use std::thread; + use tokio::runtime::Runtime; pub fn get(placeholder: String) -> &'static str { info!("{}", placeholder); @@ -25,18 +23,20 @@ pub(crate) mod markers { } pub fn post(data: Vec) -> &'static str { - for item in data { - info!("{} - {}", item.uid, item.name); - } + thread::spawn(move || { + let rt = Runtime::new().unwrap(); + rt.block_on(async_post_markers(data)); + }); - return "not implemented yet"; + "loading" } pub fn post_debug(data: Vec) -> String { let client = reqwest::blocking::Client::new(); let authentication_token = data[0].api_auth_token.clone(); - let parsed_address: String = data[0].api_address.clone() + "/api/markers?auth_token=" + &authentication_token; + let parsed_address: String = + data[0].api_address.clone() + "/api/markers?auth_token=" + &authentication_token; let mut status: String = "fetching".to_string(); diff --git a/src/util.rs b/src/util.rs index 5aaa11b..47a4c05 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,4 +1,5 @@ use log::{error, info}; +use reqwest::Client; use crate::structs::{LoginInfo, LoginPayload, Marker, MarkerPayload}; @@ -30,6 +31,48 @@ pub fn parse_marker_to_payload(marker: Marker) -> MarkerPayload { } } +pub async fn async_post_markers(data: Vec) { + let client = Client::new(); + + let authentication_token = data[0].api_auth_token.clone(); + let parsed_address: String = + data[0].api_address.clone() + "/api/markers?auth_token=" + &authentication_token; + + let mut status: String = "fetching".to_string(); + + info!("{}", status); + + for marker in data { + let payload = parse_marker_to_payload(marker); + let request_body = serde_json::to_string(&payload).unwrap(); + + info!( + "Parsing: {}, to {} with {}", + request_body, parsed_address, authentication_token + ); + + let response = client + .post(&parsed_address) + .body(request_body) + .header("Content-Type", "application/json") + .send() + .await; + + match response { + Ok(result) => { + status = result.status().to_string(); + info!("Received: {}", result.text().await.unwrap()); + } + Err(error) => { + status = "fetch failed".to_string(); + error!("Error: {}", error) + } + } + } + + info!("Final status: {}", status); +} + pub fn blocking_fetch_auth_token(payload: LoginInfo, api_address: String) -> String { let parsed_address = api_address + "/api/login?include_auth_token";