23 releases

0.5.1 Mar 23, 2025
0.5.0 Oct 19, 2024
0.4.0 Sep 27, 2024
0.3.0 Mar 29, 2024
0.1.6 Nov 26, 2023

#135 in Procedural macros

Download history 78/week @ 2024-12-15 82/week @ 2024-12-22 73/week @ 2024-12-29 71/week @ 2025-01-05 131/week @ 2025-01-12 89/week @ 2025-01-19 74/week @ 2025-01-26 121/week @ 2025-02-02 120/week @ 2025-02-09 174/week @ 2025-02-16 167/week @ 2025-02-23 190/week @ 2025-03-02 161/week @ 2025-03-09 186/week @ 2025-03-16 298/week @ 2025-03-23 92/week @ 2025-03-30

739 downloads per month
Used in 2 crates (via launchpadlib)

Apache-2.0 and maybe GPL-3.0+

135KB
3.5K SLoC

This crate contains a parser for the Web Application Description Language (WADL).

It can also generate basic rust bindings based on WADL files, if the codegen feature is enabled.

Example usage

Simply parsing the ast

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

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

Generating code

Create a build.rs that generates rust code:

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();
}

Then, you can include the generated code from your rust code:

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

Dependencies

~5–17MB
~228K SLoC