multi_param

Attribute Macro multi_param 

Source
#[multi_param]
Expand description

Annotates a trait to automatically generate getters and setters that forward to methods of the same name in various structs.

This is used to create traits that encapsulate state that’s shared across multiple parameter definitions.

This trait takes as arguments the names of various structs for which it should automatically generate an implementation. It should annotate a trait that contains a fields! macro, using the same named field syntax that a struct uses. For each field, a getter and setter is generated both in the trait and in its implementation for each struct.

#[multi_param(EQUIP_PARAM_ACCESSORY_ST, EQUIP_PARAM_GOODS_ST)]
pub trait EquipParamPassive: EquipParam {
    fields! {
        sfx_variation_id: i32,
        ref_category: u8,
        sp_effect_category: u8,
        shop_lv: i16,
    }
}

§Field Attributes

This can also be used as to annotate field attributes.

§rename()

You can use the rename() annotation to rename the field this targets for a particular struct. This can be useful if the same logical field has different names, which sometimes happens due to typos in FromSoftware’s internal names.

The syntax is #[multi_param(rename(param = ..., name = ...))]. The struct must exactly match one of the structs passed to the outer annotation, and the name must be a valid identifier.

#[multi_param(
    EQUIP_PARAM_ACCESSORY_ST,
    EQUIP_PARAM_GOODS_ST,
    EQUIP_PARAM_PROTECTOR_ST,
    EQUIP_PARAM_WEAPON_ST
)]
pub trait EquipParam {
    fields! {
        weight: f32,
        basic_price: i32,
        sell_value: i32,
        sort_id: i32,
        vagrant_item_lot_id: i32,
        #[multi_param(
            rename(param = EQUIP_PARAM_PROTECTOR_ST, name = "vagrant_bonusene_drop_item_lot_id"),
            rename(param = EQUIP_PARAM_WEAPON_ST, name = "vagrant_bonusene_drop_item_lot_id"),
        )]
        vagrant_bonus_ene_drop_item_lot_id: i32;
        vagrant_item_ene_drop_item_lot_id: i32,
    }
}
```rs