Pass colors through a field in `Context` rather than on `Styled` directly

finchie
Aug 27, 2025, 9:07 AM
GOMTCPOLHRE3FNK7C7BVGGUBSSV3JERUEFNGF7XMPRPRCCAVQDVAC

Dependencies

  • [2] 6XEMHUGS Use full `Locale` instead of `LanguageIdentifier` subset
  • [3] AE3AZFVK Add `Styled<L: Localize>` struct to support localizing colors
  • [4] USKESL6X Add examples for using common types in `l10n_embed`
  • [5] YUW3BUXX Add examples for `l10n_embed_interaction`
  • [6] LYOV6ZIR Add `layout` module for localizing with separators and vertical/horizontal padding
  • [7] RA3H7PWC Refactor `Localize` for performance
  • [8] AS7RDZT7 Implement `Localize` for `std::path` and `camino`
  • [9] Q7LUHXXB Replace localization of `Vec<Localize>` with `List` type
  • [10] QJC4IQIT Refactor `Localize` functions to infallibly return `String`
  • [11] MABGENI7 Refactor `fluent_embed_derive` tests
  • [12] EKXWNEPK Rename `Localize::message_for_locale` to `Localize::localize_for`
  • [*] HHJDRLLN Create `fluent_embed_runtime` crate

Change contents

  • replacement in l10n_embed_interaction/examples/prompt/main.rs at line 50
    [5.1236][7.3191:3251]()
    let context = Arc::new(Context::new(locale!("en-US")));
    [5.1236]
    [7.3251]
    let context = Arc::new(Context::new(locale!("en-US"), true));
  • replacement in l10n_embed_interaction/examples/progress/main.rs at line 18
    [5.5313][7.3366:3426]()
    let context = Arc::new(Context::new(locale!("en-US")));
    [5.5313]
    [7.3426]
    let context = Arc::new(Context::new(locale!("en-US"), true));
  • replacement in l10n_embed_derive/tests/common/mod.rs at line 5
    [2.1318][7.3741:3781]()
    let context = Context::new(locale);
    [2.1318]
    [7.3781]
    let context = Context::new(locale, true);
  • replacement in l10n_embed/src/style.rs at line 8
    [3.210][3.210:283]()
    self.style = self.style.map(|style| style.$function_name());
    [3.210]
    [3.283]
    self.style = self.style.$function_name();
  • replacement in l10n_embed/src/style.rs at line 17
    [3.370][3.370:396]()
    style: Option<Style>,
    [3.370]
    [3.396]
    style: Style,
  • replacement in l10n_embed/src/style.rs at line 23
    [7.5565][7.5565:5660]()
    if let Some(style) = self.style {
    let prefix = style.render().to_string();
    [7.5565]
    [7.5660]
    if context.use_colors {
    let prefix = self.style.render().to_string();
  • replacement in l10n_embed/src/style.rs at line 31
    [7.5806][7.5806:5907]()
    if let Some(style) = self.style {
    let suffix = style.render_reset().to_string();
    [7.5806]
    [7.5907]
    if context.use_colors {
    let suffix = self.style.render_reset().to_string();
  • replacement in l10n_embed/src/style.rs at line 39
    [3.749][3.749:801]()
    pub fn new(message: L, enabled: bool) -> Self {
    [3.749]
    [3.801]
    pub fn new(message: L) -> Self {
  • replacement in l10n_embed/src/style.rs at line 42
    [3.837][3.837:962]()
    style: match enabled {
    true => Some(Style::new()),
    false => None,
    },
    [3.837]
    [3.962]
    style: Style::new(),
  • replacement in l10n_embed/src/style.rs at line 51
    [3.1105][3.1105:1273]()
    pub fn color(mut self, color: AnsiColor) -> Self {
    self.style = self
    .style
    .map(|style| style.fg_color(Some(Color::Ansi(color))));
    [3.1105]
    [3.1273]
    pub fn color(mut self, ansi_color: AnsiColor) -> Self {
    self.style = self.style.fg_color(Some(Color::Ansi(ansi_color)));
  • edit in l10n_embed/src/lib.rs at line 43
    [7.7510]
    [7.7510]
    pub use_colors: bool,
  • replacement in l10n_embed/src/lib.rs at line 51
    [7.7744][7.7744:7785]()
    pub fn new(locale: Locale) -> Self {
    [7.7744]
    [7.7785]
    pub fn new(locale: Locale, use_color: bool) -> Self {
  • edit in l10n_embed/src/lib.rs at line 54
    [7.7820]
    [7.7820]
    use_colors: use_color,
  • replacement in l10n_embed/examples/time.rs at line 23
    [7.12985][7.12985:13035]()
    let context = Context::new(locale!("en-US"));
    [7.12985]
    [7.13035]
    let context = Context::new(locale!("en-US"), true);
  • edit in l10n_embed/examples/style.rs at line 8
    [7.13297][4.1341:1342](),[4.1341][4.1341:1342](),[4.1391][4.1391:1506]()
    // This is used to disable rendering of colors, e.g. based on user configuration
    const STYLE_ENABLED: bool = true;
  • replacement in l10n_embed/examples/style.rs at line 11
    [4.1568][7.13298:13370](),[7.13370][4.1642:1692](),[4.1642][4.1642:1692](),[4.1692][7.13371:13450](),[7.13450][4.1770:1821](),[4.1770][4.1770:1821](),[4.1821][7.13451:13548]()
    let bold_green: Styled<u64> = Styled::new(5_000_000, STYLE_ENABLED)
    .bold()
    .color(AnsiColor::Green);
    let italic_blue: Styled<&'static str> = Styled::new("&str", STYLE_ENABLED)
    .italic()
    .color(AnsiColor::Blue);
    let strikethrough_red: Styled<Timestamp> = Styled::new(Timestamp::UNIX_EPOCH, STYLE_ENABLED)
    [4.1568]
    [4.1911]
    let bold_green: Styled<u64> = Styled::new(5_000_000).bold().color(AnsiColor::Green);
    let italic_blue: Styled<&'static str> = Styled::new("&str").italic().color(AnsiColor::Blue);
    let strikethrough_red: Styled<Timestamp> = Styled::new(Timestamp::UNIX_EPOCH)
  • edit in l10n_embed/examples/style.rs at line 18
    [4.2081]
    [7.13549]
    let colors = [("enabled", true), ("disabled", false)];
  • replacement in l10n_embed/examples/style.rs at line 25
    [7.13762][7.13762:13812]()
    let context = Context::new(locale!("en-US"));
    [7.13762]
    [7.13812]
    let mut context = Context::new(locale!("en-US"), true);
  • edit in l10n_embed/examples/style.rs at line 27
    [7.13848]
    [7.13848]
    // Demonstrate both with and without colors
    for (color_name, colors_enabled) in colors {
    context.use_colors = colors_enabled;
    println!("----- Colors {color_name} -----");
  • replacement in l10n_embed/examples/style.rs at line 33
    [7.13849][7.13849:13954]()
    for (name, style) in styles {
    buffer.clear();
    style.localize(&context, &mut buffer);
    [7.13849]
    [7.13954]
    for (name, style) in &styles {
    buffer.clear();
    style.localize(&context, &mut buffer);
  • replacement in l10n_embed/examples/style.rs at line 37
    [7.13955][7.13955:13993]()
    println!("{name}: {buffer}");
    [7.13955]
    [7.13993]
    println!("{name}: {buffer}");
    }
  • replacement in l10n_embed/examples/string.rs at line 22
    [7.14302][7.14302:14352]()
    let context = Context::new(locale!("en-US"));
    [7.14302]
    [7.14352]
    let context = Context::new(locale!("en-US"), true);
  • replacement in l10n_embed/examples/path.rs at line 21
    [7.14837][7.14837:14887]()
    let context = Context::new(locale!("en-US"));
    [7.14837]
    [7.14887]
    let context = Context::new(locale!("en-US"), true);
  • replacement in l10n_embed/examples/list.rs at line 22
    [7.15347][7.15347:15397]()
    let context = Context::new(locale!("en-US"));
    [7.15347]
    [7.15397]
    let context = Context::new(locale!("en-US"), true);
  • replacement in l10n_embed/examples/layout.rs at line 32
    [6.4749][7.16042:16092]()
    let context = Context::new(locale!("en-US"));
    [6.4749]
    [7.16092]
    let context = Context::new(locale!("en-US"), true);
  • replacement in l10n_embed/examples/decimal.rs at line 15
    [7.16298][7.16298:16348]()
    let context = Context::new(locale!("en-US"));
    [7.16298]
    [7.16348]
    let context = Context::new(locale!("en-US"), true);