diff --git a/crates/tuono/src/source_builder/static_files.rs b/crates/tuono/src/source_builder/static_files.rs index 1f13256b..7422fb12 100644 --- a/crates/tuono/src/source_builder/static_files.rs +++ b/crates/tuono/src/source_builder/static_files.rs @@ -25,6 +25,7 @@ use axum::response::Html; use axum::{routing::get, Router}; use tower_http::services::ServeDir; use tuono_lib::{ssr, Ssr}; +use reqwest::Client; // MODULE_IMPORTS @@ -32,9 +33,12 @@ use tuono_lib::{ssr, Ssr}; async fn main() { Ssr::create_platform(); + let fetch = Client::new(); + let app = Router::new() // ROUTE_BUILDER - .fallback_service(ServeDir::new("public").fallback(get(catch_all))); + .fallback_service(ServeDir::new("public").fallback(get(catch_all))) + .with_state(fetch); let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); axum::serve(listener, app).await.unwrap(); diff --git a/crates/tuono_lib/src/request.rs b/crates/tuono_lib/src/request.rs index 0210aef9..59c9cdaf 100644 --- a/crates/tuono_lib/src/request.rs +++ b/crates/tuono_lib/src/request.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use axum::http::{HeaderMap, Uri}; -#[derive(Debug)] +#[derive(Debug, Copy, Clone)] pub struct Request<'a> { uri: &'a Uri, headers: &'a HeaderMap, diff --git a/crates/tuono_lib_macros/src/handler.rs b/crates/tuono_lib_macros/src/handler.rs index 0f15053c..fef2731d 100644 --- a/crates/tuono_lib_macros/src/handler.rs +++ b/crates/tuono_lib_macros/src/handler.rs @@ -9,25 +9,25 @@ pub fn handler_core(_args: TokenStream, item: TokenStream) -> TokenStream { quote! { use axum::response::{Html, IntoResponse}; + use axum::extract::State; + use reqwest::Client; #item - pub async fn route(request: axum::extract::Request) -> Html { + pub async fn route(State(client): State, request: axum::extract::Request) -> Html { let pathname = &request.uri(); let headers = &request.headers(); let req = tuono_lib::Request::new(pathname, headers); - let local_response = #fn_name(&req); + let local_response = #fn_name(req.clone(), client).await; - let res = match local_response{ + let res = match local_response { tuono_lib::Response::Props(val) => { // TODO: remove unwrap let payload = tuono_lib::Payload::new(&req, val).client_payload().unwrap(); - dbg!(&payload); - tuono_lib::ssr::Js::SSR.with(|ssr| ssr.borrow_mut().render_to_string(Some(&payload))) }, /// TODO: handle here redirection and rewrite @@ -40,13 +40,13 @@ pub fn handler_core(_args: TokenStream, item: TokenStream) -> TokenStream { } } - pub async fn api(request: axum::extract::Request) -> axum::response::Response { + pub async fn api(State(client): State, request: axum::extract::Request) -> axum::response::Response { let pathname = &request.uri(); let headers = &request.headers(); let req = tuono_lib::Request::new(pathname, headers); - let local_response = #fn_name(&req); + let local_response = #fn_name(req.clone(), client).await; let res = match local_response{ tuono_lib::Response::Props(val) => return axum::Json(val).into_response(),