dampen_core/codegen/
application.rs1use proc_macro2::TokenStream;
4use quote::quote;
5
6pub fn generate_application_trait(
8 model_name: &str,
9 message_name: &str,
10) -> Result<TokenStream, super::CodegenError> {
11 let model_ident = syn::Ident::new(model_name, proc_macro2::Span::call_site());
12 let message_ident = syn::Ident::new(message_name, proc_macro2::Span::call_site());
13
14 Ok(quote! {
15 impl iced::Application for #model_ident {
16 type Executor = iced::executor::Default;
17 type Flags = ();
18 type Message = #message_ident;
19
20 fn new(_flags: ()) -> (Self, iced::Task<Self::Message>) {
21 (Self::default(), iced::Task::none())
22 }
23
24 fn title(&self) -> String {
25 "Dampen Application".to_string()
26 }
27 }
28 })
29}
30
31#[cfg(test)]
32mod tests {
33 use super::*;
34
35 #[test]
36 fn test_application_trait_generation() {
37 let result = generate_application_trait("MyModel", "MyMessage").unwrap();
38 let code = result.to_string();
39
40 assert!(code.contains("impl") && code.contains("Application") && code.contains("MyModel"));
41 assert!(code.contains("Message") && code.contains("MyMessage"));
42 }
43}