diff --git a/crates/axum_bundler/src/bundle.rs b/crates/axum_bundler/src/bundle.rs index 15f27119..687ce3b5 100644 --- a/crates/axum_bundler/src/bundle.rs +++ b/crates/axum_bundler/src/bundle.rs @@ -25,7 +25,6 @@ async fn main() { let app = Router::new() // ROUTE_BUILDER - .nest_service("/__tuono", ServeDir::new(".tuono")) .fallback_service(ServeDir::new("public").fallback(get(catch_all))); let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); @@ -119,7 +118,10 @@ fn create_axum_routes_declaration(routes: &HashMap) -> String { let mut route_declarations = String::from("// ROUTE_BUILDER\n"); for (route, _path) in routes.iter() { - route_declarations.push_str(&format!(r#".route("/{route}", get({route}::route))"#)) + route_declarations.push_str(&format!(r#".route("/{route}", get({route}::route))"#)); + route_declarations.push_str(&format!( + r#".route("/__tuono/data/{route}", get({route}::api))"# + )); } route_declarations diff --git a/crates/tuono_lib_macros/src/handler.rs b/crates/tuono_lib_macros/src/handler.rs index 5ad7723c..0f15053c 100644 --- a/crates/tuono_lib_macros/src/handler.rs +++ b/crates/tuono_lib_macros/src/handler.rs @@ -8,12 +8,11 @@ pub fn handler_core(_args: TokenStream, item: TokenStream) -> TokenStream { let fn_name = item.clone().sig.ident; quote! { - use axum::response::Html; + use axum::response::{Html, IntoResponse}; #item pub async fn route(request: axum::extract::Request) -> Html { - println!("Custom handler"); let pathname = &request.uri(); let headers = &request.headers(); @@ -35,12 +34,24 @@ pub fn handler_core(_args: TokenStream, item: TokenStream) -> TokenStream { _ => Ok("500 Internal server error".to_string()) }; - match res { Ok(html) => Html(html), _ => Html("500 internal server error".to_string()) } - + } + + pub async fn api(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 res = match local_response{ + tuono_lib::Response::Props(val) => return axum::Json(val).into_response(), + _ => return axum::Json("").into_response() + }; } } .into()