17 个版本

0.3.0 2024 年 3 月 29 日
0.2.7 2023 年 12 月 18 日
0.1.8 2023 年 12 月 9 日
0.1.6 2023 年 11 月 26 日
0.1.5 2023 年 10 月 27 日

#132过程宏

Download history 339/week @ 2024-04-20 22/week @ 2024-04-27 4/week @ 2024-05-25 1/week @ 2024-06-01 1/week @ 2024-06-08 10/week @ 2024-06-22 5/week @ 2024-06-29 6/week @ 2024-07-06 27/week @ 2024-07-13 4/week @ 2024-07-20 114/week @ 2024-07-27 52/week @ 2024-08-03

197 每月下载量
2 个 Crates 中使用(通过 launchpadlib

Apache-2.0 和可能 GPL-3.0+

125KB
3K SLoC

此 crate 包含一个 Web 应用描述语言 (WADL) 的解析器。

如果启用 codegen 功能,它还可以根据 WADL 文件生成基本的 Rust 绑定。

示例用法

简单解析 AST

let app: wadl::ast::Application = wadl::parse_file("1.0.wadl").unwrap();

println!("{:#}", app);

生成代码

创建一个生成 Rust 代码的 build.rs 文件

fn main() {
    let config = wadl::codegen::Config {
        // Set extra options here to influence code generation,
        // e.g. to rename functions.
        ..Default::default()
    };

    let wadl = std::fs::read_to_string(
            concat!(env!("CARGO_MANIFEST_DIR"), "/x.wadl")).unwrap();

    let wadl_app = wadl::parse_string(wadl.as_str()).unwrap();
    let code = wadl::codegen::generate(&wadl_app, &config);
    let target_dir = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap())
        .canonicalize()
        .unwrap();
    let generated = target_dir.join("generated");
    std::fs::create_dir_all(&generated).unwrap();
    let path = generated.join("x.wadl");
    std::fs::write(path, code).unwrap();
}

然后,您可以从 Rust 代码中包含生成的代码

include!(concat!(env!("OUT_DIR"), "/generated/x.rs"));

依赖项

~4–16MB
~232K SLoC