1 个不稳定版本

0.1.0 2023年2月4日

#2864Rust 模式

MIT/Apache

9KB
127

嵌套结构体

是否想过创建一个包含嵌套数据的数据结构?你是否发现自己仅仅为了组合它们而创建了多个单独的结构体?那么,这个库就是为你准备的!

将这个

pub struct MyStruct {
    pub data: MyStructData,
}

pub struct MyStructData {
    pub data: u32
}

转换成这个

use nested_struct::*;

nested_struct! {
    pub struct MyStruct {
        pub data: MyStructData {
            pub data: u32
        }
    }
}

基本用法

创建一个新的可能包含嵌套字段的结构体。

use nested_struct::*;

nested_struct! {
    pub struct MyStruct {
        pub regular_field: u32,
        pub nested_field: NestedField {
            pub inner_field: bool
        }
    }
}

let _ = MyStruct {
    regular_field: 123,
    nested_field: NestedField {
        inner_field: true,
    },
};

深度嵌套的结构体

嵌套不仅限于单级。你可以生成具有多级嵌套字段的结构体

use nested_struct::*;

nested_struct! {
    pub struct MyStruct {
        pub nested_field: NestedField {
            pub nested_field: DeeperNestedField {
                pub inner_field: bool
            }
        }
    }
}

let _ = MyStruct {
    nested_field: NestedField {
        nested_field: DeeperNestedField {
            inner_field: true,
        }
    },
};

将字段属性应用于嵌套结构体的字段

与普通结构体一样,嵌套字段也可以放置属性

use nested_struct::*;

nested_struct! {
    pub struct MyStruct {
        pub regular_field: u32,

        #[doc = "my nested field"]
        pub nested_field: NestedField {
            pub inner_field: bool
        }
    }
}

将结构体级别的属性应用于嵌套结构体

如果你想在生成的嵌套结构体上应用属性,你需要使用 @nested 标记。这可以多次使用,但必须在任何字段特定属性之后出现

use nested_struct::*;

nested_struct! {
    pub struct MyStruct {
        pub regular_field: u32,

        #[doc = "my nested field"]
        @nested(#[derive(Clone)])
        pub nested_field: NestedField {
            pub inner_field: bool
        }
    }
}

let nested_field = NestedField { inner_field: true };
let _ = MyStruct {
    regular_field: 123,
    nested_field: nested_field.clone(),
};

许可证

该项目根据您的选择受以下任一许可证的约束:

Apache 许可证第 2 版 (LICENSE-APACHE 或 apache-license) MIT 许可证 (LICENSE-MIT 或 mit-license)

无运行时依赖