diff options
| author | Fuwn <[email protected]> | 2026-01-21 09:03:05 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-01-21 09:03:05 +0000 |
| commit | 43fb2c613448589e0bac61996f38653cbefebd45 (patch) | |
| tree | 8439711dcdca6227672a24538ee34fc0064e1c1a /rossweisse/src | |
| parent | perf(router): Reduce per-connection overhead with shared RequestHandler (diff) | |
| download | windmark-43fb2c613448589e0bac61996f38653cbefebd45.tar.xz windmark-43fb2c613448589e0bac61996f38653cbefebd45.zip | |
fix(rossweisse): Fix all clippy pedantic and nursery lint errors
Diffstat (limited to 'rossweisse/src')
| -rw-r--r-- | rossweisse/src/implementations/route.rs | 2 | ||||
| -rw-r--r-- | rossweisse/src/implementations/router/fields.rs | 25 | ||||
| -rw-r--r-- | rossweisse/src/implementations/router/methods.rs | 41 | ||||
| -rw-r--r-- | rossweisse/src/lib.rs | 22 |
4 files changed, 46 insertions, 44 deletions
diff --git a/rossweisse/src/implementations/route.rs b/rossweisse/src/implementations/route.rs index d6e2356..cc7c4cd 100644 --- a/rossweisse/src/implementations/route.rs +++ b/rossweisse/src/implementations/route.rs @@ -17,6 +17,6 @@ use proc_macro::TokenStream; -pub fn route(_arguments: TokenStream, item: syn::ItemFn) -> TokenStream { +pub fn route(_arguments: TokenStream, item: &syn::ItemFn) -> TokenStream { quote::quote! { #item }.into() } diff --git a/rossweisse/src/implementations/router/fields.rs b/rossweisse/src/implementations/router/fields.rs index 6d09ab4..b3121e9 100644 --- a/rossweisse/src/implementations/router/fields.rs +++ b/rossweisse/src/implementations/router/fields.rs @@ -17,6 +17,7 @@ use proc_macro::TokenStream; use quote::quote; +use syn::punctuated::Punctuated; pub fn fields(arguments: TokenStream, item: syn::ItemStruct) -> TokenStream { let field_initializers = syn::parse_macro_input!( @@ -29,11 +30,11 @@ pub fn fields(arguments: TokenStream, item: syn::ItemStruct) -> TokenStream { ( syn::FieldsNamed { brace_token: syn::token::Brace::default(), - named: Default::default(), + named: Punctuated::default(), }, false, ), - _ => + syn::Fields::Unnamed(_) => panic!( "`#[rossweisse::router]` can only be used on `struct`s with named \ fields or unit structs" @@ -46,17 +47,19 @@ pub fn fields(arguments: TokenStream, item: syn::ItemStruct) -> TokenStream { .0 .iter() .find(|initialiser| initialiser.ident == name.clone().unwrap()) - .map(|initialiser| &initialiser.expr) - .unwrap_or_else(|| { - default_expressions.push({ - let default_expression: syn::Expr = - syn::parse_quote! { ::std::default::Default::default() }; + .map_or_else( + || { + default_expressions.push({ + let default_expression: syn::Expr = + syn::parse_quote! { ::std::default::Default::default() }; - default_expression - }); + default_expression + }); - default_expressions.last().unwrap() - }); + default_expressions.last().unwrap() + }, + |initialiser| &initialiser.expr, + ); quote! { #name: #initialiser, diff --git a/rossweisse/src/implementations/router/methods.rs b/rossweisse/src/implementations/router/methods.rs index 2ae4086..18f639b 100644 --- a/rossweisse/src/implementations/router/methods.rs +++ b/rossweisse/src/implementations/router/methods.rs @@ -25,30 +25,25 @@ pub fn methods( .items .iter_mut() .filter_map(|item| { - if let syn::ImplItem::Fn(method) = item { - for attribute in method.attrs.iter() { - if attribute.path().is_ident("route") { - let arguments = quote::ToTokens::into_token_stream(attribute) - .to_string() - .trim_end_matches(")]") - .trim_start_matches("#[route(") - .to_string(); + let syn::ImplItem::Fn(method) = item else { + return None; + }; + let route_attrribute = method + .attrs + .iter() + .find(|attribute| attribute.path().is_ident("route"))?; + let arguments = quote::ToTokens::into_token_stream(route_attrribute) + .to_string() + .trim_end_matches(")]") + .trim_start_matches("#[route(") + .to_string(); - if arguments == "index" { - method.sig.ident = - syn::Ident::new("__router_index", method.sig.ident.span()); - } - - return Some(method.sig.ident.clone()); - } else { - return None; - } - } - - None - } else { - None + if arguments == "index" { + method.sig.ident = + syn::Ident::new("__router_index", method.sig.ident.span()); } + + Some(method.sig.ident.clone()) }) .collect::<Vec<_>>(); let (implementation_generics, type_generics, where_clause) = @@ -60,7 +55,7 @@ pub fn methods( format!( "/{}", if route == "__router_index" { - "".to_string() + String::new() } else { route.to_string() } diff --git a/rossweisse/src/lib.rs b/rossweisse/src/lib.rs index 612bbac..815f36d 100644 --- a/rossweisse/src/lib.rs +++ b/rossweisse/src/lib.rs @@ -36,6 +36,10 @@ use syn::Item; /// Marks a `struct` as a router or marks an `impl` block as a router /// implementation /// +/// # Panics +/// +/// Panics if used on an item that is not a `struct` or `impl` block. +/// /// # Examples /// /// ```rust @@ -57,17 +61,19 @@ use syn::Item; /// ``` #[proc_macro_attribute] pub fn router(arguments: TokenStream, item: TokenStream) -> TokenStream { - let output = match syn::parse::<Item>(item.clone()) { + match syn::parse::<Item>(item) { Ok(Item::Struct(item)) => implementations::fields(arguments, item), Ok(Item::Impl(item)) => implementations::methods(arguments, item), _ => panic!("`#[rossweisse::router]` can only be used on `struct`s"), - }; - - output.into() + } } /// Marks a method of a router implementation as a route to mount /// +/// # Panics +/// +/// Panics if used on an item that is not a function. +/// /// # Examples /// /// ```rust @@ -84,10 +90,8 @@ pub fn router(arguments: TokenStream, item: TokenStream) -> TokenStream { /// ``` #[proc_macro_attribute] pub fn route(arguments: TokenStream, item: TokenStream) -> TokenStream { - let output = match syn::parse::<Item>(item.clone()) { - Ok(Item::Fn(item)) => implementations::route(arguments, item), + match syn::parse::<Item>(item) { + Ok(Item::Fn(ref item)) => implementations::route(arguments, item), _ => panic!("`#[rossweisse::route]` can only be used on `fn`s"), - }; - - output.into() + } } |