#[derive(Setter)]
{
// Attributes available to this derive:
#[exclude_setter]
#[include_setter]
}
Expand description
Автоопределение set методов для полей именованых структур.
По умолчанию все поля включены в определение set_ методов.
Также с помощью атрибутов можно опционально исключать полe из определния set_ метода,
а также включать.
- Аттрибут
exclude_setterисключает поле из полей по умолчанию; - Аттрибут
include_setterзаставляет макрос определять методset_только для полей с этим атрибутом.
§Конфликты атрибутов
- Поле не может иметь одновременно исключающее и включающее поле, они препятсвуют работе друг друга;
- Поле не может быть исключающим, если какое-либо поле до него было определено как включающее, и наоборот.
§Реализация по умолчанию
use std_reset_macros::Setter;
#[derive(Setter, Clone, Copy, Default, PartialEq, Debug)]
struct Tmp {
first: i32,
second: i32,
}
let tmp = Tmp::default().set_first(2).set_second(3);
assert_eq!(
tmp,
Tmp {
first: 2,
second: 3
}
);§Исключающие поля
C помощью атрибута exclude_setter можно исключить поле из определения set_ метода,
таким образом метод будет определен только для дефолтных полей.
§Пример
#[derive(Setter, Clone, Copy, Default, PartialEq, Debug)]
struct Tmp {
first: i32,
#[exclude_setter]
second: i32,
}– здесь метод set_ определен только для поля first.
§Включающие поля
Если есть хотябы одно поле с атрибутом include_setter, это значит,
что макрос перестает опрделеять методы set_ для полей по умолчанию,
а начал назначать их для полей с атрибутом include_setter.
§Пример
#[derive(Setter, Clone, Copy, Default, PartialEq, Debug)]
struct Tmp {
#[include_setter]
first: i32,
second: i32,
#[include_setter]
third: i32
}– здесь метод set_ определен только для полей first и third.