Store multiple locales in a single `Group`
Dependencies
- [2]
ROSR4HD5Parse captured glob as locale - [3]
XGNME3WRMove `Group::derive_enum` to new `crate::parse_macro` module - [4]
HJMYJDC7Simplify `fluent_embed::group` module - [5]
OCR4YRQ2Parse group from fluent file specified by macro attribute - [6]
5FIVUZYFUnify `fluent_embed` macro API as `localize()` - [7]
QSK7JRBAAdd simple `attribute_path` function - [8]
XEEXWJLGAdd simple end-to-end test for selectors - [9]
VNSHGQYNSupport using glob paths in `localize` macro - [10]
5TEX4MNUSplit `fluent_embed` into `group` and `parse` modules
Change contents
- edit in fluent_embed/src/parse_macro.rs at line 1
use std::collections::HashMap; - replacement in fluent_embed/src/parse_macro.rs at line 5
use icu_locid::Locale;use icu_locid::{locale, Locale}; - edit in fluent_embed/src/parse_macro.rs at line 20
let message = group.children.iter().find(|message| message.id.name == kebab_case_ident).unwrap(); - replacement in fluent_embed/src/parse_macro.rs at line 37
messages.push(crate::parse_fluent::message(message));messages.push(crate::parse_fluent::message(group.canonical_message_for(&kebab_case_ident),)); - replacement in fluent_embed/src/parse_macro.rs at line 53
pub fn attribute_groups(path_literal: syn::LitStr) -> Vec<Group> {pub fn attribute_groups(path_literal: syn::LitStr) -> Group { - replacement in fluent_embed/src/parse_macro.rs at line 58
let mut groups = Vec::new();let mut resources = HashMap::new(); - replacement in fluent_embed/src/parse_macro.rs at line 73[3.673]→[2.333:393](∅→∅),[2.393]→[3.63:64](∅→∅),[3.625]→[3.63:64](∅→∅),[3.725]→[3.63:64](∅→∅),[3.258]→[3.63:64](∅→∅),[3.64]→[3.726:754](∅→∅)
let group = Group::from_resource(resource, locale);groups.push(group);resources.insert(locale, resource); - replacement in fluent_embed/src/parse_macro.rs at line 76
groupsGroup::new(locale!("en-US"), resources) - replacement in fluent_embed/src/parse_macro.rs at line 85
derive_enum(groups[0].clone(), ident, variants)derive_enum(groups, ident, variants) - edit in fluent_embed/src/group.rs at line 1
use std::collections::HashMap; - edit in fluent_embed/src/group.rs at line 5
#[derive(Clone, Debug)]struct LocalizationsForMessage {canonical_message: Message<String>,pub additional_messages: HashMap<Locale, Message<String>>,}impl LocalizationsForMessage {fn new(canonical_message: Message<String>) -> Self {Self {canonical_message,additional_messages: HashMap::new(),}}} - replacement in fluent_embed/src/group.rs at line 23
locale: Locale,pub children: Vec<Message<String>>,canonical_locale: Locale,messages: HashMap<String, LocalizationsForMessage>, - replacement in fluent_embed/src/group.rs at line 28
pub fn from_resource(resource: Resource<String>, locale: Locale) -> Self {let mut children = Vec::new();pub fn new(canonical_locale: Locale, mut resources: HashMap<Locale, Resource<String>>) -> Self {let canonical_resource = resources.remove(&canonical_locale).unwrap(); - replacement in fluent_embed/src/group.rs at line 31
for entry in resource.body {let matched_entry = if let Entry::Message(message) = entry {message} else {todo!()};let mut messages = HashMap::new(); - replacement in fluent_embed/src/group.rs at line 33
children.push(matched_entry);for entry in canonical_resource.body {if let Entry::Message(message) = entry {messages.insert(message.id.name.clone(),LocalizationsForMessage::new(message),);} - replacement in fluent_embed/src/group.rs at line 42
Self { locale, children }for (locale, resource) in resources {for entry in resource.body {if let Entry::Message(message) = entry {let localizations = messages.get_mut(&message.id.name).unwrap();localizations.additional_messages.insert(locale.clone(), message);}}}Self {canonical_locale,messages,} - edit in fluent_embed/src/group.rs at line 58
pub fn canonical_message_for(&self, id: &str) -> &Message<String> {&self.messages.get(id).unwrap().canonical_message}