Skip to content

Commit 8734bac

Browse files
authored
feat(versioned): Emit generics in plain From impl (#1284)
* feat(versioned): Emit generics in plain From impl * test(versioned): Add snapshot test for generics
1 parent 3939800 commit 8734bac

4 files changed

Lines changed: 82 additions & 2 deletions

File tree

‎crates/stackable-versioned-macros/src/codegen/container/struct/mod.rs‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,8 @@ impl Struct {
478478
) -> TokenStream {
479479
// TODO (@Techassi): A bunch this stuff is duplicated in self.generate_tracking_from_impl.
480480
// Ideally we remove that duplication.
481+
let (impl_generics, type_generics, where_clause) = self.generics.split_for_impl();
482+
481483
let from_struct_ident = &self.common.idents.parameter;
482484
let struct_ident = &self.common.idents.original;
483485

@@ -521,8 +523,12 @@ impl Struct {
521523
quote! {
522524
#automatically_derived
523525
#allow_attribute
524-
impl ::core::convert::From<#from_module_ident::#struct_ident> for #for_module_ident::#struct_ident {
525-
fn from(#from_struct_ident: #from_module_ident::#struct_ident) -> Self {
526+
impl #impl_generics
527+
::core::convert::From<#from_module_ident::#struct_ident #type_generics>
528+
for #for_module_ident::#struct_ident #type_generics
529+
#where_clause
530+
{
531+
fn from(#from_struct_ident: #from_module_ident::#struct_ident #type_generics) -> Self {
526532
Self {
527533
#fields
528534
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
use stackable_versioned::versioned;
2+
// ---
3+
#[versioned(version(name = "v1alpha1"), version(name = "v1alpha2"))]
4+
// ---
5+
pub(crate) mod versioned {
6+
struct FooSpec<Bar, Baz>
7+
where
8+
Bar: Default,
9+
Baz: Clone,
10+
{
11+
bar: Bar,
12+
baz: Baz,
13+
}
14+
}
15+
// ---
16+
fn main() {}

‎crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@generics.rs.snap‎

Lines changed: 57 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎crates/stackable-versioned-macros/tests/trybuild.rs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ mod inputs {
2828
// mod docs;
2929
// mod downgrade_with;
3030
// mod enum_fields;
31+
// mod generics;
3132
// mod module;
3233
// mod module_preserve;
3334
// mod renamed_field;

0 commit comments

Comments
 (0)