Implement `to_syn` for groups containing simple text messages

finchie
Feb 11, 2024, 6:23 AM
3C3CHSY5FETUIE7W2VQ5V62GJNE3MW2WUM7GJDUFWSDB4WKNFR2AC

Dependencies

  • [2] O77KA6C4 Create `fluent_embed` crate

Change contents

  • replacement in fluent_embed/src/lib.rs at line 1
    [2.74][2.75:127]()
    use fluent_syntax::ast::{Entry, Message, Resource};
    [2.74]
    [2.127]
    use fluent_syntax::ast::{Entry, Message, PatternElement, Resource};
    use syn::parse_quote;
  • replacement in fluent_embed/src/lib.rs at line 5
    [2.145][2.145:174]()
    enum GroupEntry<'resource> {
    [2.145]
    [2.174]
    pub enum GroupEntry<'resource> {
  • edit in fluent_embed/src/lib.rs at line 12
    [2.315]
    [2.315]
    }
    impl<'resource> GroupEntry<'resource> {
    fn to_syn(&self) -> syn::Expr {
    match self {
    Self::Message(message) => message.value.as_ref().map_or_else(
    || parse_quote! { () },
    |pattern| {
    let parsed_patterns = pattern.elements.iter().map(match_pattern_element);
    parse_quote! { #(#parsed_patterns)+* }
    },
    ),
    }
    }
  • edit in fluent_embed/src/lib.rs at line 48
    [2.991]
    [2.991]
    }
    // TODO: turn this into a well-formed `match expression`
    pub fn to_syn(&self) -> Vec<syn::Expr> {
    self.children
    .iter()
    .map(GroupEntry::to_syn)
    .collect::<Vec<_>>()
  • edit in fluent_embed/src/lib.rs at line 58
    [2.999]
    fn match_pattern_element<'resource>(
    pattern_element: &'resource PatternElement<&'resource str>,
    ) -> syn::Expr {
    match pattern_element {
    PatternElement::TextElement { value } => parse_quote! { #value },
    _ => todo!(),
    }
    }
  • edit in fluent_embed/examples/groups.rs at line 2
    [2.1082]
    [2.1082]
    use quote::quote;
  • edit in fluent_embed/examples/groups.rs at line 9
    [2.1244]
    [2.1244]
    let syn_expressions = group
    .to_syn()
    .iter()
    .map(|expr| quote! {#expr})
    .collect::<Vec<_>>();
  • replacement in fluent_embed/examples/groups.rs at line 15
    [2.1245][2.1245:1262]()
    dbg!(group);
    [2.1245]
    [2.1262]
    dbg!(syn_expressions);