Files
tuono/crates/tuono_lib_macros/src/handler.rs
T

45 lines
1.4 KiB
Rust
Raw Normal View History

2024-05-18 20:45:35 +02:00
use proc_macro::TokenStream;
use quote::quote;
use syn::{parse_macro_input, ItemFn};
pub fn handler_core(_args: TokenStream, item: TokenStream) -> TokenStream {
let item = parse_macro_input!(item as ItemFn);
let fn_name = item.clone().sig.ident;
quote! {
2024-07-02 21:59:30 +02:00
use tuono_lib::axum::response::IntoResponse;
2024-06-02 20:32:53 +02:00
use std::collections::HashMap;
2024-07-02 21:59:30 +02:00
use tuono_lib::axum::extract::{State, Path};
2024-05-18 20:45:35 +02:00
#item
2024-06-02 20:32:53 +02:00
pub async fn route(
Path(params): Path<HashMap<String, String>>,
2024-07-07 11:44:36 +02:00
State(client): State<tuono_lib::reqwest::Client>,
2024-07-02 21:59:30 +02:00
request: tuono_lib::axum::extract::Request
) -> impl IntoResponse {
let pathname = &request.uri();
let headers = &request.headers();
2024-06-02 20:32:53 +02:00
let req = tuono_lib::Request::new(pathname, headers, params);
#fn_name(req.clone(), client).await.render_to_string(req)
2024-05-20 21:07:37 +02:00
}
2024-06-02 20:32:53 +02:00
pub async fn api(
Path(params): Path<HashMap<String, String>>,
2024-07-07 11:44:36 +02:00
State(client): State<tuono_lib::reqwest::Client>,
2024-07-02 21:59:30 +02:00
request: tuono_lib::axum::extract::Request
) -> impl IntoResponse{
2024-06-15 12:31:39 +02:00
let pathname = &request.uri();
2024-05-20 21:07:37 +02:00
let headers = &request.headers();
2024-06-02 20:32:53 +02:00
let req = tuono_lib::Request::new(pathname, headers, params);
2024-05-20 21:07:37 +02:00
#fn_name(req.clone(), client).await.json()
2024-05-18 20:45:35 +02:00
}
}
.into()
}