Skip to content

Commit f149527

Browse files
committed
feat: Generate correct From impls on type changes
1 parent 118ed09 commit f149527

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

crates/stackable-versioned-macros/src/codegen/vstruct/field.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,25 @@ impl VersionedField {
202202
) => quote! {
203203
#ident: #default_fn(),
204204
},
205+
(
206+
_,
207+
ItemStatus::Change {
208+
from_ident: old_field_ident,
209+
to_ident,
210+
from_type,
211+
to_type,
212+
},
213+
) => {
214+
if from_type == to_type {
215+
quote! {
216+
#to_ident: #from_ident.#old_field_ident,
217+
}
218+
} else {
219+
quote! {
220+
#to_ident: #from_ident.#old_field_ident.into(),
221+
}
222+
}
223+
}
205224
(old, next) => {
206225
let old_field_ident = old
207226
.get_ident()

crates/stackable-versioned-macros/tests/good/basic.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ use stackable_versioned_macros::versioned;
99
version(name = "v1beta1"),
1010
version(name = "v1"),
1111
version(name = "v2"),
12-
version(name = "v3"),
13-
options(skip(from))
12+
version(name = "v3")
1413
)]
1514
pub(crate) struct Foo {
1615
#[versioned(

0 commit comments

Comments
 (0)