#[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
.