#default #traits #customization #macro #cute

cute_custom_default

用于具有自定义点的 Default 特征的派生宏

3 个稳定版本

2.2.0 2024 年 8 月 10 日
2.1.0 2020 年 3 月 21 日
2.0.0 2019 年 4 月 6 日
1.0.0 2019 年 4 月 6 日

过程宏 中排名第 1721

Download history 59/week @ 2024-04-20 49/week @ 2024-04-27 53/week @ 2024-05-04 54/week @ 2024-05-11 71/week @ 2024-05-18 57/week @ 2024-05-25 44/week @ 2024-06-01 38/week @ 2024-06-08 89/week @ 2024-06-15 80/week @ 2024-06-22 89/week @ 2024-06-29 8/week @ 2024-07-06 35/week @ 2024-07-13 46/week @ 2024-07-20 81/week @ 2024-07-27 40/week @ 2024-08-03

每月下载量 203

Apache-2.0

17KB
204 代码行

CustomDefault

Build Crates.io Documentation

用于具有自定义点的 Default 特征的派生宏


lib.rs:

CustomDefault

提供具有自定义点的 Default 特征的派生宏

属性

  • def_val=<value> - 指定字段的默认值。字段类型错误时引发恐慌。
  • def_exp="expression" - 指定放置在字段初始化器中的表达式。无预处理。

用法

use cute_custom_default::CustomDefault;

pub fn default_value_string() -> &'static str {
    "default_value_string"
}

#[derive(CustomDefault)]
pub struct MyStruct {
    #[def_val='c']
    pub custom_char: char,
    #[def_val=b"my_bytes"]
    pub custom_bytes: [u8; 8],
    #[def_val=b"my_bytes"]
    pub custom_bytes_slice: &'static [u8],
    #[def_val=b'b']
    pub custom_default: u8,
    #[def_val=true]
    pub custom_bool: bool,
    pub normal_bool: bool,
    #[def_exp="\"Just my string\".to_owned()"]
    pub expression: String,
    #[def_exp="default_value_string()"]
    pub static_str: &'static str,
    #[def_val="Just my string"]
    pub string: String,
    #[def_val="Just my string"]
    pub static_str_again: &'static str,
    #[def_val=666]
    pub u32_field: u32,
    #[def_exp="std::u16::MAX"]
    pub u16_field: u16,
    #[def_exp="-655_555"]
    pub i32_field: i32,
}

fn main() {
    let my_struct = MyStruct::default();
    assert_eq!(my_struct.custom_char, 'c');
    assert_eq!(my_struct.custom_default, b'b');
    assert_eq!(&my_struct.custom_bytes, b"my_bytes");
    assert_eq!(my_struct.custom_bytes_slice, b"my_bytes");
    assert_eq!(my_struct.custom_bool, true);
    assert_eq!(my_struct.normal_bool, false);
    assert_eq!(my_struct.expression, "Just my string");
    assert_eq!(my_struct.static_str, default_value_string());
    assert_eq!(my_struct.string, "Just my string");
    assert_eq!(my_struct.static_str_again, "Just my string");
    assert_eq!(my_struct.u32_field, 666);
    assert_eq!(my_struct.u16_field, std::u16::MAX);
    assert_eq!(my_struct.i32_field, -655_555);
}

依赖项

~270–720KB
~17K SLoC