#dsl #macro #closures #builder #calls #tweet #rewrites

nightly dsl_macros

方便宏,用于重写构建器闭包内部的方法调用

3 个版本

使用旧的 Rust 2015

0.1.2 2015年3月9日
0.1.1 2015年2月26日
0.1.0 2015年2月26日

#14 in #tweet

MIT 许可证

9KB
155

此宏可用于使用闭包进行配置的多种构建器。宏仅重写没有路径的简单方法调用,其他表达式保持不变。它不涉及类似 builder.method()module::method()Class::method() 的调用。类型参数按预期工作,因此您可以使用 method<T>(),并且宏将其转换为 context.method<T>()

兼容库

  1. Rustless — Rust 的类似 REST 的 API 微框架。与 Iron 一起工作。
  2. jsonway — JSON 构建 DSL 和 Rust 的可配置序列化器。
  3. valico — JSON Schema 验证器和 JSON 强制转换器。
  4. 任何其他使用相同构建块模式的库。

用法

源代码

dsl!(|context, other_arg1, other_arg2, /* .. */| {
    method_of_context(other_arg1);
    another_method_of_context(other_arg2);
})

结果

|context, other_arg1, other_arg2, /* .. */| {
    context.method_of_context(other_arg1);
    context.another_method_of_context(other_arg2);
}

示例

没有 DSL:

rustless::Namespace::build("tweets", |tweets| {
    tweets.get("latest", |endpoint| {
        endpoint.desc("Get latest tweets");
        endpoint.handle(|client, _params| {
            // body omitted
        })
    });

    tweet.post(/* omitted */);
    tweet.delete(/* omitted */);
})

有 DSL:

rustless::Namespace::build("tweets", dsl!(|tweets| {
    get("latest", dsl!(|endpoint| {
        desc("Get latest tweets");
        handle(|client, _params| {
            // body omitted
        })
    }));

    post(/* omitted */);
    delete(/* omitted */);
}))

无运行时依赖