Simplify `fluent_embed::group` module
Dependencies
- [2]
XGNME3WRMove `Group::derive_enum` to new `crate::parse_macro` module - [3]
5TEX4MNUSplit `fluent_embed` into `group` and `parse` modules - [4]
D652S2N3Rename `parse` module to `parse_fluent` - [5]
QSK7JRBAAdd simple `attribute_path` function - [6]
O77KA6C4Create `fluent_embed` crate - [7]
3C3CHSY5Implement `to_syn` for groups containing simple text messages - [8]
UOMQT7LTAdd support for cardinal CLDR plural selectors - [9]
NFHPBRB5Support named fields in enum variants - [10]
BMUMO42IAdd support for inline string and number literals - [11]
K4XW4OBWCreate derive macro helper function for simple enums
Change contents
- replacement in fluent_embed/src/parse_macro.rs at line 20
.find(|child| child.id() == kebab_case_ident).find(|message| message.id.name == kebab_case_ident) - replacement in fluent_embed/src/parse_macro.rs at line 39
messages.push(message.to_syn());messages.push(crate::parse_fluent::message(message)); - replacement in fluent_embed/src/parse_fluent.rs at line 2
Expression, InlineExpression, Pattern, PatternElement, Variant, VariantKey,Expression, InlineExpression, Message, Pattern, PatternElement, Variant, VariantKey, - replacement in fluent_embed/src/parse_fluent.rs at line 8
pub(crate) fn pattern<'resource>(pattern: &'resource Pattern<&'resource str>) -> syn::Expr {pub(crate) fn pattern(pattern: &Pattern<String>) -> syn::Expr { - replacement in fluent_embed/src/parse_fluent.rs at line 28
fn placeable_expression<'resource>(expression: &'resource Expression<&'resource str>) -> syn::Expr {fn placeable_expression(expression: &Expression<String>) -> syn::Expr { - replacement in fluent_embed/src/parse_fluent.rs at line 45
fn inline_expression<'resource>(expression: &'resource InlineExpression<&'resource str>,) -> syn::Expr {fn inline_expression(expression: &InlineExpression<String>) -> syn::Expr { - replacement in fluent_embed/src/parse_fluent.rs at line 69
fn variant<'resource>(variant: &Variant<&'resource str>) -> syn::Arm {fn variant(variant: &Variant<String>) -> syn::Arm { - replacement in fluent_embed/src/parse_fluent.rs at line 85
fn variant_key<'resource>(variant_key: &VariantKey<&'resource str>) -> syn::Pat {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
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,}}pub struct Group {pub children: Vec<Message<String>>, - replacement in fluent_embed/src/group.rs at line 8
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(()),}}}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
impl<'resource> Group<'resource> {pub fn from_resource(resource: &'resource Resource<&'resource str>) -> Self {let mut children = Vec::new();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
for entry in &resource.body {let matched_entry = GroupEntry::try_from(entry).unwrap(); - replacement in fluent_embed/examples/groups.rs at line 5
let ftl = r#"emails =let ftl = String::from(r#"emails = - replacement in fluent_embed/examples/groups.rs at line 10
}"#;}"#,); - replacement in fluent_embed/examples/groups.rs at line 14
let group = Group::from_resource(&resource);let group = Group::from_resource(resource);