dampen_core/codegen/
application.rs

1//! Application trait generation
2
3use proc_macro2::TokenStream;
4use quote::quote;
5
6/// Generate Application trait implementation
7pub 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}