aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-01-21 09:03:05 +0000
committerFuwn <[email protected]>2026-01-21 09:03:05 +0000
commit43fb2c613448589e0bac61996f38653cbefebd45 (patch)
tree8439711dcdca6227672a24538ee34fc0064e1c1a
parentperf(router): Reduce per-connection overhead with shared RequestHandler (diff)
downloadwindmark-43fb2c613448589e0bac61996f38653cbefebd45.tar.xz
windmark-43fb2c613448589e0bac61996f38653cbefebd45.zip
fix(rossweisse): Fix all clippy pedantic and nursery lint errors
-rw-r--r--rossweisse/src/implementations/route.rs2
-rw-r--r--rossweisse/src/implementations/router/fields.rs25
-rw-r--r--rossweisse/src/implementations/router/methods.rs41
-rw-r--r--rossweisse/src/lib.rs22
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()
+ }
}