🏗️ Elegant & Highly Performant Async Gemini Server Framework for the Modern Age
async framework gemini-protocol protocol gemini rust
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat(rossweisse): remove required phantom data

Fuwn bffe2c16 bf47405d

+36 -22
+1 -3
examples/struct_router.rs
··· 21 21 use windmark::response::Response; 22 22 23 23 #[rossweisse::router] 24 - struct Router { 25 - _phantom: (), 26 - } 24 + struct Router; 27 25 28 26 #[rossweisse::router] 29 27 impl Router {
+35 -19
rossweisse/src/implementations/router/fields.rs
··· 23 23 arguments as super::parser::FieldInitializers<syn::Expr> 24 24 ); 25 25 let router_identifier = item.ident; 26 - let named_fields = match item.fields { 27 - syn::Fields::Named(fields) => fields, 28 - _ => 29 - panic!( 30 - "`#[rossweisse::router]` can only be used on `struct`s with named \ 31 - fields" 32 - ), 26 + let (named_fields, has_fields) = match item.fields { 27 + syn::Fields::Named(fields) => (fields, true), 28 + syn::Fields::Unit => ( 29 + syn::FieldsNamed { 30 + brace_token: syn::token::Brace::default(), 31 + named: Default::default(), 32 + }, 33 + false, 34 + ), 35 + _ => panic!( 36 + "`#[rossweisse::router]` can only be used on `struct`s with named \ 37 + fields or unit structs" 38 + ), 33 39 }; 34 40 let mut default_expressions = vec![]; 35 41 let new_method_fields = named_fields.named.iter().map(|field| { ··· 54 60 #name: #initialiser, 55 61 } 56 62 }); 57 - let new_methods = quote! { 58 - fn _new() -> Self { 59 - Self { 60 - #(#new_method_fields)* 61 - router: ::windmark::router::Router::new(), 63 + let new_methods = if has_fields { 64 + quote! { 65 + fn _new() -> Self { 66 + Self { 67 + #(#new_method_fields)* 68 + router: ::windmark::router::Router::new(), 69 + } 62 70 } 63 71 } 64 - 65 - pub async fn run(&mut self) -> Result<(), Box<dyn std::error::Error>> { 66 - self.router.run().await 67 - } 68 - 69 - pub fn router(&mut self) -> &mut ::windmark::router::Router { 70 - &mut self.router 72 + } else { 73 + quote! { 74 + fn _new() -> Self { 75 + Self { 76 + router: ::windmark::router::Router::new(), 77 + } 78 + } 71 79 } 72 80 }; 73 81 let output_fields = named_fields.named; ··· 79 87 80 88 impl #router_identifier { 81 89 #new_methods 90 + 91 + pub async fn run(&mut self) -> Result<(), Box<dyn std::error::Error>> { 92 + self.router.run().await 93 + } 94 + 95 + pub fn router(&mut self) -> &mut ::windmark::router::Router { 96 + &mut self.router 97 + } 82 98 } 83 99 }; 84 100