Simplify `fluent_embed::group` module

finchie
Feb 14, 2024, 2:17 PM
HJMYJDC77NLU44QZWIW7CELXJKD4EK4YZ6CCILYBG6FWGZ2KMBVAC

Dependencies

  • [2] XGNME3WR Move `Group::derive_enum` to new `crate::parse_macro` module
  • [3] 5TEX4MNU Split `fluent_embed` into `group` and `parse` modules
  • [4] D652S2N3 Rename `parse` module to `parse_fluent`
  • [5] QSK7JRBA Add simple `attribute_path` function
  • [6] O77KA6C4 Create `fluent_embed` crate
  • [7] 3C3CHSY5 Implement `to_syn` for groups containing simple text messages
  • [8] UOMQT7LT Add support for cardinal CLDR plural selectors
  • [9] NFHPBRB5 Support named fields in enum variants
  • [10] BMUMO42I Add support for inline string and number literals
  • [11] K4XW4OBW Create derive macro helper function for simple enums

Change contents

  • replacement in fluent_embed/src/parse_macro.rs at line 20
    [2.582][2.582:640]()
    .find(|child| child.id() == kebab_case_ident)
    [2.582]
    [2.640]
    .find(|message| message.id.name == kebab_case_ident)
  • replacement in fluent_embed/src/parse_macro.rs at line 39
    [2.1307][2.1307:1348]()
    messages.push(message.to_syn());
    [2.1307]
    [2.1348]
    messages.push(crate::parse_fluent::message(message));
  • replacement in fluent_embed/src/parse_fluent.rs at line 2
    [3.60][3.60:140]()
    Expression, InlineExpression, Pattern, PatternElement, Variant, VariantKey,
    [3.60]
    [3.140]
    Expression, InlineExpression, Message, Pattern, PatternElement, Variant, VariantKey,
  • replacement in fluent_embed/src/parse_fluent.rs at line 8
    [3.239][3.27:120]()
    pub(crate) fn pattern<'resource>(pattern: &'resource Pattern<&'resource str>) -> syn::Expr {
    [3.239]
    [3.352]
    pub(crate) fn pattern(pattern: &Pattern<String>) -> syn::Expr {
  • replacement in fluent_embed/src/parse_fluent.rs at line 28
    [3.1019][3.190:291]()
    fn placeable_expression<'resource>(expression: &'resource Expression<&'resource str>) -> syn::Expr {
    [3.1019]
    [3.1133]
    fn placeable_expression(expression: &Expression<String>) -> syn::Expr {
  • replacement in fluent_embed/src/parse_fluent.rs at line 45
    [3.1629][3.591:624](),[3.624][3.1668:1746](),[3.1668][3.1668:1746]()
    fn inline_expression<'resource>(
    expression: &'resource InlineExpression<&'resource str>,
    ) -> syn::Expr {
    [3.1629]
    [3.1746]
    fn inline_expression(expression: &InlineExpression<String>) -> syn::Expr {
  • replacement in fluent_embed/src/parse_fluent.rs at line 69
    [3.2593][3.625:696]()
    fn variant<'resource>(variant: &Variant<&'resource str>) -> syn::Arm {
    [3.2593]
    [3.696]
    fn variant(variant: &Variant<String>) -> syn::Arm {
  • replacement in fluent_embed/src/parse_fluent.rs at line 85
    [3.3112][3.787:869]()
    fn variant_key<'resource>(variant_key: &VariantKey<&'resource str>) -> syn::Pat {
    [3.3112]
    [3.869]
    fn variant_key(variant_key: &VariantKey<String>) -> syn::Pat {
  • edit in fluent_embed/src/parse_fluent.rs at line 94
    [3.3463]
    pub(crate) fn message(message: &Message<String>) -> syn::Expr {
    if let Some(value) = message.value.as_ref() {
    pattern(value)
    } else {
    parse_quote!(())
    }
    }
  • edit in fluent_embed/src/group.rs at line 2
    [3.3668][3.3668:3690]()
    use syn::parse_quote;
  • replacement in fluent_embed/src/group.rs at line 4
    [3.3708][3.3708:3790](),[3.3790][3.3790:3793](),[3.3793][3.3793:3840](),[3.3840][2.1661:1707](),[2.1707][3.3882:3884](),[3.3882][3.3882:3884](),[3.3884][3.3884:3885](),[3.3885][3.3885:3925](),[3.3925][2.1708:1748](),[2.1748][3.3961:4077](),[3.3961][3.3961:4077](),[3.4077][3.913:994](),[3.994][3.4164:4180](),[3.4164][3.4164:4180](),[3.4180][3.4180:4181](),[3.4181][2.1749:1790](),[2.1790][3.4218:4310](),[3.4218][3.4218:4310]()
    pub enum GroupEntry<'resource> {
    Message(&'resource Message<&'resource str>),
    }
    #[derive(Debug)]
    pub struct Group<'resource> {
    pub children: Vec<GroupEntry<'resource>>,
    }
    impl<'resource> GroupEntry<'resource> {
    pub fn to_syn(&self) -> syn::Expr {
    match self {
    Self::Message(message) => message
    .value
    .as_ref()
    .map_or_else(|| parse_quote!(()), crate::parse_fluent::pattern),
    }
    }
    pub fn id(&self) -> &'resource str {
    match self {
    Self::Message(message) => message.id.name,
    }
    }
    [3.3708]
    [3.4310]
    pub struct Group {
    pub children: Vec<Message<String>>,
  • replacement in fluent_embed/src/group.rs at line 8
    [3.4313][3.4313:4641]()
    impl<'resource> TryFrom<&'resource Entry<&'resource str>> for GroupEntry<'resource> {
    type Error = ();
    fn try_from(value: &'resource Entry<&'resource str>) -> Result<Self, Self::Error> {
    match value {
    Entry::Message(message) => Ok(Self::Message(message)),
    _ => Err(()),
    }
    }
    }
    [3.4313]
    [3.4641]
    impl Group {
    pub fn from_resource(resource: Resource<String>) -> Self {
    let mut children = Vec::new();
  • replacement in fluent_embed/src/group.rs at line 12
    [3.4642][3.4642:4798]()
    impl<'resource> Group<'resource> {
    pub fn from_resource(resource: &'resource Resource<&'resource str>) -> Self {
    let mut children = Vec::new();
    [3.4642]
    [3.4798]
    for entry in resource.body {
    let matched_entry = if let Entry::Message(message) = entry {
    message
    } else {
    todo!()
    };
  • edit in fluent_embed/src/group.rs at line 19
    [3.4799][3.4799:4907]()
    for entry in &resource.body {
    let matched_entry = GroupEntry::try_from(entry).unwrap();
  • replacement in fluent_embed/examples/groups.rs at line 5
    [3.1095][3.715:741]()
    let ftl = r#"emails =
    [3.1095]
    [3.741]
    let ftl = String::from(
    r#"emails =
  • replacement in fluent_embed/examples/groups.rs at line 10
    [3.863][3.863:873]()
    }
    "#;
    [3.863]
    [3.1131]
    }"#,
    );
  • replacement in fluent_embed/examples/groups.rs at line 14
    [3.1195][3.1195:1244]()
    let group = Group::from_resource(&resource);
    [3.1195]
    [3.1159]
    let group = Group::from_resource(resource);