#[derive(Deref)]
{
// Attributes available to this derive:
#[deref]
}
Expand description
Автореализация Deref и DerefMut для структур.
Макрос поддерживает работу с именованными и неименнованными структурами.
§Реализация с одним неименованным полем
Дефолтная реализация макроса без дополнительных указаний работает только с одним неименованым полем. При разименовании структуры будет возвращены данные этого поля.
use std_reset_macros::Deref;
#[derive(Deref)]
struct Wrapper(pub Vec<i32>);
let mut wrapper = Wrapper(vec![1, 2, 3]);
assert_eq!(*wrapper, vec![1, 2, 3]);§Со множеством неименованных полей
Когда появляется несколько полей, макросу необходимо указать конретное поле,
которое будет возвращено после разыменования с помощью атрибута #[deref].
#[derive(Deref)]
struct Wrapper(pub Vec<i32>, #[deref] pub String);
let mut wrapper = Wrapper(vec![1, 2, 3], String::from("crab"));
assert_eq!(*wrapper, "crab");§Со множеством именованных полей
Тоже самое работает и с именованными полями:
#[derive(Deref)]
struct Wrapper {
pub first: Vec<i32>,
#[deref]
pub second: String,
}
let mut wrapper = Wrapper {
first: vec![1, 2, 3],
second: String::from("crab"),
};
assert_eq!(*wrapper, "crab");