aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-04-01 05:57:35 +0000
committerFuwn <[email protected]>2024-04-01 05:57:35 +0000
commitbffe2c16e5e21d8c5e7c652b110c7d4f9f979c22 (patch)
treef7e36fcfa0f7a35f94c527420fd752c805a579db
parentbuild(rustc): update toolchain (diff)
downloadwindmark-bffe2c16e5e21d8c5e7c652b110c7d4f9f979c22.tar.xz
windmark-bffe2c16e5e21d8c5e7c652b110c7d4f9f979c22.zip
feat(rossweisse): remove required phantom data
-rw-r--r--examples/struct_router.rs4
-rw-r--r--rossweisse/src/implementations/router/fields.rs54
2 files changed, 36 insertions, 22 deletions
diff --git a/examples/struct_router.rs b/examples/struct_router.rs
index 3401379..d95b76f 100644
--- a/examples/struct_router.rs
+++ b/examples/struct_router.rs
@@ -21,9 +21,7 @@ use rossweisse::route;
use windmark::response::Response;
#[rossweisse::router]
-struct Router {
- _phantom: (),
-}
+struct Router;
#[rossweisse::router]
impl Router {
diff --git a/rossweisse/src/implementations/router/fields.rs b/rossweisse/src/implementations/router/fields.rs
index 6c3941a..1280270 100644
--- a/rossweisse/src/implementations/router/fields.rs
+++ b/rossweisse/src/implementations/router/fields.rs
@@ -23,13 +23,19 @@ pub fn fields(arguments: TokenStream, item: syn::ItemStruct) -> TokenStream {
arguments as super::parser::FieldInitializers<syn::Expr>
);
let router_identifier = item.ident;
- let named_fields = match item.fields {
- syn::Fields::Named(fields) => fields,
- _ =>
- panic!(
- "`#[rossweisse::router]` can only be used on `struct`s with named \
- fields"
- ),
+ let (named_fields, has_fields) = match item.fields {
+ syn::Fields::Named(fields) => (fields, true),
+ syn::Fields::Unit => (
+ syn::FieldsNamed {
+ brace_token: syn::token::Brace::default(),
+ named: Default::default(),
+ },
+ false,
+ ),
+ _ => panic!(
+ "`#[rossweisse::router]` can only be used on `struct`s with named \
+ fields or unit structs"
+ ),
};
let mut default_expressions = vec![];
let new_method_fields = named_fields.named.iter().map(|field| {
@@ -54,20 +60,22 @@ pub fn fields(arguments: TokenStream, item: syn::ItemStruct) -> TokenStream {
#name: #initialiser,
}
});
- let new_methods = quote! {
- fn _new() -> Self {
- Self {
- #(#new_method_fields)*
- router: ::windmark::router::Router::new(),
+ let new_methods = if has_fields {
+ quote! {
+ fn _new() -> Self {
+ Self {
+ #(#new_method_fields)*
+ router: ::windmark::router::Router::new(),
+ }
}
}
-
- pub async fn run(&mut self) -> Result<(), Box<dyn std::error::Error>> {
- self.router.run().await
- }
-
- pub fn router(&mut self) -> &mut ::windmark::router::Router {
- &mut self.router
+ } else {
+ quote! {
+ fn _new() -> Self {
+ Self {
+ router: ::windmark::router::Router::new(),
+ }
+ }
}
};
let output_fields = named_fields.named;
@@ -79,6 +87,14 @@ pub fn fields(arguments: TokenStream, item: syn::ItemStruct) -> TokenStream {
impl #router_identifier {
#new_methods
+
+ pub async fn run(&mut self) -> Result<(), Box<dyn std::error::Error>> {
+ self.router.run().await
+ }
+
+ pub fn router(&mut self) -> &mut ::windmark::router::Router {
+ &mut self.router
+ }
}
};