amq-protocol 0.3.0

AMQP specifications
Documentation
extern crate amq_protocol_codegen;

use amq_protocol_codegen::*;

use std::collections::BTreeMap;
use std::env;
use std::fs::File;
use std::io::Write;
use std::path::Path;

fn main() {
    let out_dir     = env::var("OUT_DIR").expect("OUT_DIR is not defined");
    let dest_path   = Path::new(&out_dir).join("protocol.rs");
    let mut f       = File::create(&dest_path).expect("Failed to create protocol.rs");
    let specs       = AMQProtocolDefinition::load();
    let mut codegen = CodeGenerator::new().register_amqp_helpers();
    let mut data    = BTreeMap::new();

    codegen.register_template_string("main", include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/templates/main.rs")).to_string()).expect("Failed to register main template");
    data.insert("protocol".to_string(), specs);

    writeln!(f, "{}", codegen.render("main", &data).expect("Failed to render main template")).expect("Failed to generate protocol.rs");
}