diff --git a/src/backend/Cargo.toml b/src/backend/Cargo.toml index 0e5de8e..c28acdb 100644 --- a/src/backend/Cargo.toml +++ b/src/backend/Cargo.toml @@ -8,3 +8,4 @@ axum = { version = "0.8.1", features = []} serde = { version = "1.0.219", features = ["derive"]} serde_json = "1.0.140" tokio = { version = "1.44.1", features = ["macros", "rt-multi-thread"] } +reqwest = { version = "0.11", features = ["json"] } \ No newline at end of file diff --git a/src/backend/src/main.rs b/src/backend/src/main.rs index e7f8cbe..63ee385 100644 --- a/src/backend/src/main.rs +++ b/src/backend/src/main.rs @@ -1,11 +1,13 @@ use axum::{ routing::{get, post}, Router, + response::Json }; +use serde_json::Value; mod routes; use routes::{ - handle_create_name::create_name, handle_formatted_name::formatted_name, handle_name::say_name, + handle_create_name::create_name, handle_formatted_name::formatted_name, handle_name::say_name, handle_fetch_weather::handle_request }; const BASE_URL: &str = "0.0.0.0:5000"; // base url for server @@ -16,11 +18,19 @@ async fn main() { axum::serve(listener, server()).await.unwrap(); } +async fn weather_handler() -> Json { + match handle_request().await { + Ok(data) => Json(data), // Return JSON response + Err(_) => Json("failed to fetch data".into()), + } +} + // Router pub fn server() -> Router { return Router::new() .route("/", get(|| async { "Hello, World!" })) .route("/say-name", get(|| say_name())) .route("/json-name", get(|| formatted_name())) - .route("/create-name", post(create_name)); + .route("/create-name", post(create_name)) + .route("/weather", get(weather_handler)); } diff --git a/src/backend/src/routes/handle_fetch_weather.rs b/src/backend/src/routes/handle_fetch_weather.rs new file mode 100644 index 0000000..dea4ad8 --- /dev/null +++ b/src/backend/src/routes/handle_fetch_weather.rs @@ -0,0 +1,46 @@ +// use axum::extract::Request as OtherRequest; +// use std::thread::Builder; +// use tokio::runtime::Builder; +// use axum::body::Body; + +// pub type Request = Request; + +// pub fn handle_request(uri: T) -> Builder { +// let request = Request::get(uri) +// .body(()) +// .unwrap(); + +// println!("this is the data from the request {}", request) +// } + + +use reqwest::Error; +use serde_json::Value; + +// #[derive(Debug)] +// pub struct WeatherDetails { +// name: String, +// country: String, +// region: String, +// lat: String, +// lon: String, +// timezone_id: String, +// localtime: String, +// localtime_epoch: u32, +// } + +pub async fn handle_request() -> Result { + let weather = reqwest::get("https://api.weatherstack.com/current?access_key=ee70f0af3c7ac89490f38705bbfb87c0&query=kaduna") + .await? + .json::() + .await?; + + println!("data from api_______ {:#?}", weather.get("location")); + if let Some(data) = weather.get("location") { + println!("__________ {:#?}", data); + Ok(data.clone()) + } else { + Ok(Value::Null) + } + // let weatherDet = + } \ No newline at end of file diff --git a/src/backend/src/routes/handle_name.rs b/src/backend/src/routes/handle_name.rs index 16ece1c..c8236f1 100644 --- a/src/backend/src/routes/handle_name.rs +++ b/src/backend/src/routes/handle_name.rs @@ -1,3 +1,3 @@ pub async fn say_name() -> &'static str { - "My name here:!" + "My name here:! martin" } diff --git a/src/backend/src/routes/mod.rs b/src/backend/src/routes/mod.rs index 923855f..9cf8074 100644 --- a/src/backend/src/routes/mod.rs +++ b/src/backend/src/routes/mod.rs @@ -1,3 +1,4 @@ pub mod handle_create_name; pub mod handle_formatted_name; pub mod handle_name; +pub mod handle_fetch_weather; \ No newline at end of file