Create derive macro helper function for simple enums
Dependencies
- [2]
56F2YE6HUse `prettyplease` to format macro output - [3]
UOMQT7LTAdd support for cardinal CLDR plural selectors - [4]
MIHGKLMEFix generated `format!` macro call - [5]
BMUMO42IAdd support for inline string and number literals - [6]
3C3CHSY5Implement `to_syn` for groups containing simple text messages - [7]
O77KA6C4Create `fluent_embed` crate
Change contents
- replacement in fluent_embed/src/lib.rs at line 5
use heck::ToUpperCamelCase;use heck::{ToKebabCase, ToUpperCamelCase}; - edit in fluent_embed/src/lib.rs at line 28
fn id(&self) -> &'resource str {match self {Self::Message(message) => message.id.name,}} - edit in fluent_embed/src/lib.rs at line 57
pub fn derive_enum(&self,ident: syn::Ident,enum_data: syn::DataEnum,) -> proc_macro2::TokenStream {let mut idents = Vec::with_capacity(enum_data.variants.len());let mut messages = Vec::with_capacity(enum_data.variants.len()); - replacement in fluent_embed/src/lib.rs at line 66
// TODO: turn this into a well-formed `match` expressionpub fn to_syn(&self) -> Vec<syn::Expr> {self.children.iter().map(GroupEntry::to_syn).collect::<Vec<_>>()for variant in enum_data.variants {let kebab_case_ident = variant.ident.to_string().to_kebab_case();let message = self.children.iter().find(|child| child.id() == kebab_case_ident).unwrap();idents.push(variant.ident);messages.push(message.to_syn());}quote! {impl #ident {fn localize(&self) -> String {match self {#(Self::#idents => #messages),*}}}} - replacement in fluent_embed/examples/groups.rs at line 2
use quote::quote;use syn::parse_quote; - replacement in fluent_embed/examples/groups.rs at line 5
// Example from https://projectfluent.org/fluent/guide/selectors.htmllet ftl = r#"emails ={ $unreadEmails ->[one] You have one unread email.*[other] You have { $unreadEmails } unread emails.}"#;let ftl = r#"first = onesecond = two"#; - replacement in fluent_embed/examples/groups.rs at line 10
let syn_expressions = group.to_syn().iter().map(|expr| quote! {#expr}).collect::<Vec<_>>();let source: syn::DeriveInput = parse_quote! {enum Test {First,Second,}}; - replacement in fluent_embed/examples/groups.rs at line 18
let file_contents = quote! {#(#syn_expressions)*;let data = match source.data {syn::Data::Enum(enum_data) => enum_data,_ => todo!(), - edit in fluent_embed/examples/groups.rs at line 23
let file_contents = group.derive_enum(source.ident, data);