use proc_macro2::TokenStream;
use quote::quote;
use super::expansion::expand_dsl;
use super::parser::Observer;
pub fn expand_observer(input: Observer) -> TokenStream {
let mut terms = input.dsl.terms;
let (iter_type, builder_calls) = expand_dsl(&mut terms);
let event_type = input.event;
let world = input.world;
match input.name {
Some(name) => quote! {
(#world).observer_named::<#event_type, #iter_type>(#name)
#(
#builder_calls
)*
},
None => quote! {
(#world).observer::<#event_type, #iter_type>()
#(
#builder_calls
)*
},
}
}