precise setter function calling in case more than 1 trait is implemented (collision)
This commit is contained in:
parent
5b8ec05589
commit
2b8d3942da
|
@ -590,14 +590,16 @@ pub mod rust {
|
||||||
fn generate_struct_ctor(
|
fn generate_struct_ctor(
|
||||||
&self,
|
&self,
|
||||||
_class: &Class,
|
_class: &Class,
|
||||||
_name: &str,
|
type_name: &str,
|
||||||
fields: &Vec<(&ClassField, Cow<str>, String)>,
|
fields: &Vec<(&ClassField, Cow<str>, String)>,
|
||||||
) -> TokenStream {
|
) -> TokenStream {
|
||||||
let fields_defs = fields.iter().map(|(_, name, ty)| quote! {#name: #ty});
|
let fields_defs = fields.iter().map(|(_, name, ty)| quote! {#name: #ty});
|
||||||
|
|
||||||
let this_field_asignments = fields.iter().map(|(_, name, _ty)| {
|
let this_field_asignments = fields.iter().map(|(_, name, _ty)| {
|
||||||
let setter = format_ident!("set_{}", name);
|
let setter = format_ident!("set_{}", name);
|
||||||
quote! {this.#setter(#name);}
|
let field_trait = format_ident!("{type_name}Fields");
|
||||||
|
|
||||||
|
quote! {<Self as #field_trait>::#setter(this, #name);}
|
||||||
});
|
});
|
||||||
|
|
||||||
// FIXME: handle super struct fields aswell, ARK doesnt seem to have those anyways.
|
// FIXME: handle super struct fields aswell, ARK doesnt seem to have those anyways.
|
||||||
|
@ -696,8 +698,6 @@ pub mod rust {
|
||||||
impl #method_trait for #name {}
|
impl #method_trait for #name {}
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO: impl super-type fields and methods.
|
|
||||||
|
|
||||||
let mut sup = class.super_class;
|
let mut sup = class.super_class;
|
||||||
let super_traits = core::iter::from_fn(|| {
|
let super_traits = core::iter::from_fn(|| {
|
||||||
if let Some(key) = sup {
|
if let Some(key) = sup {
|
||||||
|
|
Loading…
Reference in a new issue