#collection #macro #variant #supporting #trick #experiment #type

已删除 breakdance

用于创建编译时异构类型集合的实验性宏

3 个版本

0.0.3 2023年9月28日
0.0.2 2023年9月28日
0.0.1 2023年9月28日

#10 in #trick

MIT 许可证

13KB
193

breakdance

这是一个通过宏欺骗Rust集合以支持异构类型的实验。

该宏通过在Breakdown枚举中存储类型来支持异构列表。该枚举通过解析源代码中出现的breakdown!()调用生成,并为每个类型创建一个枚举变体。可以使用.inner().inner_ref().inner_mut()方法来获取内部值。

目前,访问内部值时仍需要指定预期类型,因此除非它们都共享一个特征,否则无法迭代内部值。对于Breakdown变体的特征实现是可能的,但目前在技术上比较困难;未来的开发可能会看到此类附加功能的扩展,但到目前为止,我主要专注于调试。

这只是一个玩具项目,让我更熟悉Rust工具的全套,但如果有人想在代码中尝试它,请随意!如果您在使它工作遇到麻烦,请在此GitHub存储库(https://github.com/j-stach/breakdance)上留下一个问题。

欢迎提出任何其他问题或建议!请通过GitHub向我发送消息。

如何使用

将其添加到您的项目中

cargo add breakdancer

它应该像这样工作

use breakdance::*;

#[breakdance]
// submod declarations

fn main() {
    let num = breakdown!(42u8);
    let tru = breakdown!(true);

    let vec: Vec<Breakdown> = vec![num, tru];

    let num: &u8 = vec[0].inner_ref();
    println![ "{}", num ];    // prints 42
    let tru: &mut bool = vec[1].inner_mut();
    *tru = false;
    println![ "{}", tru ];    // prints false

}

依赖关系

~0.3–0.8MB
~19K SLoC