Derive Macro std_reset::prelude::Default

source ·
#[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),
    )
);