minifix 0.3.0

A bare essentials library for Financial Information Exchange (FIX)
#![allow(dead_code)]

use minifix_codegen as codegen;
use minifix_dictionary::Dictionary;
use std::env::var;
use std::fs::File;
use std::io;
use std::io::Write;
use std::path::PathBuf;

fn main() -> io::Result<()> {
    #[cfg(feature = "fix40")]
    codegen(Dictionary::fix40(), "fix40.rs")?;
    #[cfg(feature = "fix41")]
    codegen(Dictionary::fix41(), "fix41.rs")?;
    #[cfg(feature = "fix42")]
    codegen(Dictionary::fix42(), "fix42.rs")?;
    #[cfg(feature = "fix43")]
    codegen(Dictionary::fix43(), "fix43.rs")?;
    // FIX 4.4 is always enabled.
    codegen(Dictionary::fix44(), "fix44.rs")?;
    #[cfg(feature = "fixt11")]
    codegen(Dictionary::fixt11(), "fixt11.rs")?;
    Ok(())
}

fn codegen(fix_dictionary: Dictionary, filename: &str) -> io::Result<()> {
    // All generated code must go in `OUT_DIR`. We avoid writing directly to
    // `src/` to avoid compilation issues on `crates.io`, which disallows
    // writing.
    let dir = PathBuf::from(var("OUT_DIR").unwrap());
    let codegen_settings = &mut codegen::Settings::default();
    codegen_settings.minifix_crate_name = "crate".to_string();
    let code = codegen::gen_definitions(&fix_dictionary, codegen_settings);
    let path = dir.join(filename);
    let file = &mut File::create(path)?;
    file.write_all(code.as_bytes())?;
    Ok(())
}