Add support for deriving items with generics

finchie
Apr 2, 2025, 6:37 AM
4BMW4JJOJ3XKMSUXDGOG4QC6QPDBC4PBOD3M2RAQQPRAF3CSGXUQC

Dependencies

  • [2] K3G4HK2J Track Fluent files using `include!`
  • [3] XGRU7WZE Add `expand` feature for proc-macro debugging
  • [4] 3NMKD6I5 Refactor `Localize` trait to use `std::io::Write`
  • [5] OWXLFLRM Merge `cli_macros` shim into `fluent_embed`
  • [6] CESJ4CTO Move macro-specific code into `macro_impl` module
  • [7] 7M4UI3TW Update dependencies to latest versions
  • [*] O77KA6C4 Create `fluent_embed` crate

Change contents

  • edit in fluent_embed_derive/src/macro_impl/mod.rs at line 5
    [4.162]
    [4.162]
    use syn::parse_quote;
  • edit in fluent_embed_derive/src/macro_impl/mod.rs at line 63
    [4.1491]
    [4.1491]
    // Get the generics for the derived item
    let (impl_generics, type_generics, where_clause) = derive_input.generics.split_for_impl();
    // Combine all of the derived item's generic parameters along with `std::io::Write` for `Localize`
    // e.g. for MyStruct<'a, T>, it will be <'a, T, W: std::io::Write>
    let localize_impl_generics =
    derive_input
    .generics
    .params
    .clone()
    .into_iter()
    .chain(std::iter::once(syn::GenericParam::Type(
    parse_quote!(W: std::io::Write),
    )));
  • replacement in fluent_embed_derive/src/macro_impl/mod.rs at line 78
    [4.1507][2.234:256]()
    impl #ident {
    [4.1507]
    [2.256]
    impl #impl_generics #ident #type_generics #where_clause {
  • replacement in fluent_embed_derive/src/macro_impl/mod.rs at line 85
    [2.652][4.211:286](),[4.1507][4.211:286]()
    impl<W: ::std::io::Write> ::fluent_embed::Localize<W> for #ident {
    [2.652]
    [4.97]
    impl <#(#localize_impl_generics),*> ::fluent_embed::Localize<W> for #ident #type_generics #where_clause {
  • replacement in fluent_embed_derive/src/lib.rs at line 22
    [3.3498][4.5386:5417](),[4.5386][4.5386:5417]()
    #original_item
    [3.3498]
    [4.869]
    #derive_input