#markup-language #markup #language #sml #simple #reliable-txt

nightly macro simpleml_macro

一个将SimpleML内容直接放置到Rust源代码中的宏

2个稳定版本

1.0.1 2024年4月10日
1.0.0 2024年4月7日

#615 in 过程宏

每月 49 次下载

MIT 协议

60KB
1K SLoC

SimpleML宏

这个crate是simpleml的扩展。它创建了一个“sml”宏,允许你在代码中声明基于SML的配置。

更新日志

1.0.1

修复了使用null值时宏恐慌的问题

用法

为了使用此宏,将以下内容添加到你的Cargo.toml中。注意:此宏需要nightly编译器的proc_macro_span功能。

[dependencies]
tree_iterators_rs = "1.2.1"
simpleml = "1.0.0"
simpleml_macro = "1.0.0"

一旦放置好这些依赖项,只需添加对宏的使用,并在你的代码中使用它。以下示例来自simpleml的README.md文件中的内联SML数据结构声明。

之前

use tree_iterators_rs::prelude::*;
use simpleml::{SMLWriter, SMLElement, SMLAttribute};

let my_sml_values = TreeNode {
    value: SMLElement {
        name: "Configuration",
        attributes: Vec::with_capacity(0),
    },
    children: Some(vec![
        TreeNode {
            value: SMLElement {
                name: "Video",
                attributes: vec![
                    SMLAttribute {
                        name: "Resolution",
                        values: vec![Some("1280"), Some("720")],
                    },
                    SMLAttribute {
                        name: "RefreshRate",
                        values: vec![Some("60")],
                    },
                    SMLAttribute {
                        name: "Fullscreen",
                        values: vec![Some("true")],
                    },
                ],
            },
            children: None,
        },
        TreeNode {
            value: SMLElement {
                name: "Audio",
                attributes: vec![
                    SMLAttribute {
                        name: "Volume",
                        values: vec![Some("100")],
                    },
                    SMLAttribute {
                        name: "Music",
                        values: vec![Some("80")],
                    },
                ],
            },
            children: None,
        },
        TreeNode {
            value: SMLElement {
                name: "Player",
                attributes: vec![SMLAttribute {
                    name: "Name",
                    values: vec![Some("Hero 123")],
                }],
            },
            children: None,
        },
    ]),
};

之后

use simpleml_macro::sml;

let my_sml_values = sml!{
    Configuration
        Video
            Resolution  1280 720
            RefreshRate 60
            Fullscreen  true
        my_custom_end_keyword
        Audio
            Volume 100
            Music  80
        my_custom_end_keyword
        Player
            Name "Hero 123"
        my_custom_end_keyword
    my_custom_end_keyword
};

依赖项

~2.5MB
~11K SLoC