#structs #flatten #enums #macro #nest

nestruct

一个Rust库,提供宏以轻松地在您的代码中展平或嵌套结构体和枚举

1 个不稳定版本

0.1.0 2023年3月19日

#1364过程宏

每月45次下载

MIT 许可证

15KB
242

Nestruct:Rust库,用于展平和嵌套结构体

Nestruct是一个Rust库,提供宏以轻松地在您的代码中展平或嵌套结构体和枚举。它可以帮助简化复杂数据结构的表示,例如Web API响应类型。Nestruct允许您编写简洁的代码,并自动生成等效的标准Rust结构体和枚举。

功能

  • nestruct::flatten!:将嵌套的结构体和枚举展平到单个命名空间。
  • nestruct::nest!:将展平的结构体和枚举嵌套到它们的原始层次结构中。

示例

使用flatten!宏,您可以转换以下嵌套结构

mod foo_bar {
    nestruct::flatten! {
        FooBar {
            /// foo
            foo: String?,
            /// bar
            bar: [[usize]?]?,
            baz: {
                qux: [{
                    quux: (usize, usize)?,
                    quuz: String?,
                }],
                corge: String,
            },
            grault: {
                garply,
                waldo { wubble: String },
                wubble(usize?, usize?)
            }?,
        }
    }
}

为以下展平结构

mod foo_bar {
    pub struct Qux {
        pub quux: Option<(usize, usize)>,
        pub quuz: Option<String>,
    }
    pub struct Baz {
        pub qux: Vec<Qux>,
        pub corge: String,
    }
    pub enum Grault {
        Garply,
        Waldo { wubble: String },
        Wubble(Option<usize>, Option<usize>),
    }
    pub struct FooBar {
        /// foo
        pub foo: Option<String>,
        /// bar
        pub bar: Option<Vec<Option<Vec<usize>>>>,
        pub baz: Baz,
        pub grault: Option<Grault>,
    }
}

同样,使用nest!宏,您可以嵌套如下的展平结构

nestruct::nest! {
    FooBar {
        /// foo
        foo: String?,
        /// bar
        bar: [[usize]?]?,
        baz: {
            qux: [{
                quux: (usize, usize)?,
                quuz: String?,
            }],
            corge: String,
        },
        grault: {
            garply,
            waldo { wubble: String },
            wubble(usize?, usize?)
        }?,
    }
}

为以下嵌套结构

pub mod foo_bar {
    pub mod baz {
        pub mod qux {
            pub struct Qux {
                pub quux: Option<(usize, usize)>,
                pub quuz: Option<String>,
            }
        }
        pub struct Baz {
            pub qux: Vec<qux::Qux>,
            pub corge: String,
        }
    }
    pub mod grault {
        pub enum Grault {
            Garply,
            Waldo { wubble: String },
            Wubble(Option<usize>, Option<usize>),
        }
    }
    pub struct FooBar {
        /// foo
        pub foo: Option<String>,
        /// bar
        pub bar: Option<Vec<Option<Vec<usize>>>>,
        pub baz: baz::Baz,
        pub grault: Option<grault::Grault>,
    }
}

安装

将以下依赖项添加到您的Cargo.toml中

[dependencies]
nestruct = "0.1.0"

许可证

Nestruct采用MIT许可证。有关更多信息,请参阅LICENSE文件。

依赖项

~2MB
~44K SLoC