Implement `Serialize, Debug, Clone` for all container types

finchie
Sep 2, 2025, 9:25 AM
ACTDIH5ITLHHUZES5JBBQJLOEFYJ6ONBRYWY2QWJLMNY52JMXEKQC

Dependencies

  • [2] HHJDRLLN Create `fluent_embed_runtime` crate
  • [3] BFL2Y7GN Add relative timestamps using `jiff` and `icu_relativetime`
  • [4] 7M4UI3TW Update dependencies to latest versions
  • [5] AE3AZFVK Add `Styled<L: Localize>` struct to support localizing colors
  • [6] S26YOXQI Update `Cargo.toml` in workspace and packages
  • [7] RUCC2HKZ Rename from `fluent_embed` to `l10n_embed`
  • [8] 2HHBS7VW Add rudimentary support for localizing lists
  • [9] LYOV6ZIR Add `layout` module for localizing with separators and vertical/horizontal padding
  • [10] RA3H7PWC Refactor `Localize` for performance
  • [11] DJH52CL3 Change lists to be based on type (and, or, unit) rather than length (wide, short, narrow)
  • [*] VZYZRAO4 Move `output-macros` crate into workspace
  • [*] UKFEFT6L Create basic `Output` proc-macro

Change contents

  • edit in l10n_embed/src/style.rs at line 1
    [5.33]
    [10.5419]
    use crate::macros::impl_serialize;
  • edit in l10n_embed/src/style.rs at line 16
    [5.321]
    [5.321]
    #[derive(Debug, Clone)]
  • edit in l10n_embed/src/style.rs at line 21
    [5.398]
    [5.398]
    impl_serialize!(Styled, message);
  • file addition: macros.rs (----------)
    [2.49]
    macro_rules! impl_serialize {
    // Handle no extra const generics
    ($container:ident, $field_name:ident) => {
    impl_serialize!($container, $field_name,);
    };
    ($container:ident, $field_name:ident, $($const_name:ident: $const_type:ty),*) => {
    impl<M: crate::Localize + serde::Serialize, $(const $const_name: $const_type),*> serde::Serialize for $container<M, $($const_name),*> {
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
    S: serde::Serializer,
    {
    self.$field_name.serialize(serializer)
    }
    }
    // impl<M: crate::Localize + std::fmt::Debug, $(const $const_name: $const_type),*> std::fmt::Debug for $container<M, $($const_name),*> {
    // fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
    // self.$field_name.fmt(f)
    // }
    // }
    };
    }
    // Re-export the macro so other modules can use it
    pub(crate) use impl_serialize;
  • edit in l10n_embed/src/list.rs at line 3
    [8.91]
    [10.6398]
    use crate::macros::impl_serialize;
  • edit in l10n_embed/src/list.rs at line 20
    [11.118]
    [11.118]
    #[derive(Debug, Clone)]
  • edit in l10n_embed/src/list.rs at line 58
    [11.1227]
    impl_serialize!(AndList, messages);
    impl_serialize!(OrList, messages);
    impl_serialize!(UnitList, messages);
  • edit in l10n_embed/src/lib.rs at line 8
    [3.4376]
    [10.6912]
    mod macros;
  • edit in l10n_embed/src/layout.rs at line 6
    [9.976]
    [10.11228]
    use crate::macros::impl_serialize;
  • edit in l10n_embed/src/layout.rs at line 9
    [9.977]
    [9.977]
    #[derive(Debug, Clone)]
  • edit in l10n_embed/src/layout.rs at line 13
    [9.1067]
    [9.1067]
    impl_serialize!(Lines, messages);
  • edit in l10n_embed/src/layout.rs at line 43
    [9.1755]
    [9.1755]
    #[derive(Debug, Clone)]
  • edit in l10n_embed/src/layout.rs at line 48
    [9.1871]
    [9.1871]
    impl_serialize!(Padded, message, VERTICAL_PADDING: usize, HORIZONTAL_PADDING: usize);
  • edit in l10n_embed/Cargo.toml at line 27
    [4.5498]
    [10.16809]
    serde.workspace = true
  • edit in Cargo.toml at line 50
    [6.3364]
    [6.3364]
    serde = "1.0"
  • edit in Cargo.lock at line 744
    [7.3149]
    [10.16856]
    "serde",