#[derive(Default)]
{
// Attributes available to this derive:
#[default]
}
Expand description
Реализация трейта Default
с указанием значений по умолчанию для каждого поля структуры.
Макрос поддерживает работу с именованными и неименнованными структурами.
Чтобы указать дефолтное значение поля необходимо использовать атрибут default
со следующим синтаксисом:
#[default("10_i32")]
T
– выражение, которое будет подставляться в поле как его дефолтное значение указывается внутри скобок и описан как строковый литерал.
P.s. Выражение описывается строке, потому чтоrust
требует
указывать в атрибутах только литералы. Макрос Default
в свою очередь
преобразует cтроковый лиетрал в выржаение.
Например, указать дефолтное значение для поля с типом &str
можно следующим образом:
#[default("\"crab\"")]
§Примеры
Структура с именнованными полями:
use std_reset_macros::Default;
#[derive(Debug, Default, PartialEq)]
struct User {
#[default("String::from(\"Ferris\")")]
name: String,
#[default("String::from(\"123FerF\")")]
password: String,
#[default("8_9999_999_999")]
number: u128,
email: Option<String>,
#[default("Some(32)")]
age: Option<u32>,
}
assert_eq!(
User::default(),
User {
name: "Ferris".to_string(),
password: "123FerF".to_string(),
number: 8_9999_999_999,
email: None,
age: Some(32),
}
);
Структура с неименнованными полями:
#[derive(Debug, Default, PartialEq)]
struct User(
#[default("String::from(\"Ferris\")")] String,
#[default("String::from(\"123FerF\")")] String,
#[default("8_9999_999_999")] u128,
Option<String>,
#[default("Some(32)")] Option<u32>,
);
assert_eq!(
User::default(),
User(
"Ferris".to_string(),
"123FerF".to_string(),
8_9999_999_999,
None,
Some(32),
)
);