use dagger_core::introspection::FullType; use genco::prelude::rust; use genco::quote; use itertools::Itertools; fn render_enum_values(values: &FullType) -> Option { let values = values .enum_values .as_ref() .into_iter() .map(|values| { values .into_iter() .sorted_by_key(|a| &a.name) .map(|val| quote! { $(val.name.as_ref()), }) }) .flatten() .collect::>(); let mut tokens = rust::Tokens::new(); for val in values { tokens.append(val); tokens.push(); } Some(tokens) } pub fn render_enum(t: &FullType) -> eyre::Result { let serialize = rust::import("serde", "Serialize"); let deserialize = rust::import("serde", "Deserialize"); Ok(quote! { #[derive($serialize, $deserialize, Clone, PartialEq, Debug)] pub enum $(t.name.as_ref()) { $(render_enum_values(t)) } }) }