Headers, cache tweaks

This commit is contained in:
2025-11-05 08:46:33 -08:00
parent e9863707d8
commit 063ea165d1
8 changed files with 455 additions and 132 deletions

View File

@@ -142,8 +142,18 @@ pub fn assets(input: TokenStream) -> TokenStream {
quote! {
#[doc = #router_doc]
pub fn #router_name() -> (&'static str, ::axum::Router<()>) {
use ::tower_http::compression::{CompressionLayer, DefaultPredicate};
let compression: CompressionLayer = CompressionLayer::new()
.br(true)
.deflate(true)
.gzip(true)
.zstd(true)
.compress_when(DefaultPredicate::new());
let router = ::axum::Router::new()
#(#route_definitions)*;
#(#route_definitions)*
.layer(compression);
(#prefix, router)
}
}
@@ -240,27 +250,39 @@ impl Parse for AssetDefinition {
match field_name.to_string().as_str() {
"source" => {
if source.is_some() {
return Err(syn::Error::new(field_name.span(), "duplicate 'source' field"));
return Err(syn::Error::new(
field_name.span(),
"duplicate 'source' field",
));
}
source = Some(content.parse()?);
}
"target" => {
if target.is_some() {
return Err(syn::Error::new(field_name.span(), "duplicate 'target' field"));
return Err(syn::Error::new(
field_name.span(),
"duplicate 'target' field",
));
}
let target_lit: LitStr = content.parse()?;
target = Some(target_lit.value());
}
"headers" => {
if headers.is_some() {
return Err(syn::Error::new(field_name.span(), "duplicate 'headers' field"));
return Err(syn::Error::new(
field_name.span(),
"duplicate 'headers' field",
));
}
headers = Some(content.parse()?);
}
_ => {
return Err(syn::Error::new(
field_name.span(),
format!("unknown field '{}', expected 'source', 'target', or 'headers'", field_name)
format!(
"unknown field '{}', expected 'source', 'target', or 'headers'",
field_name
),
));
}
}
@@ -272,8 +294,10 @@ impl Parse for AssetDefinition {
}
// Validate required fields
let source = source.ok_or_else(|| syn::Error::new(name.span(), "missing required field 'source'"))?;
let target = target.ok_or_else(|| syn::Error::new(name.span(), "missing required field 'target'"))?;
let source = source
.ok_or_else(|| syn::Error::new(name.span(), "missing required field 'source'"))?;
let target = target
.ok_or_else(|| syn::Error::new(name.span(), "missing required field 'target'"))?;
Ok(AssetDefinition {
name,