ipfixrw 0.1.0

IPFIX reader/writer library
Documentation
use std::cell::RefCell;
use std::io::Cursor;
use std::rc::Rc;

use ahash::{HashMap, HashMapExt};
use binrw::BinWrite;
use ipfixrw::parse_ipfix_message;
use test_case::test_case;

use ipfixrw::information_elements::get_default_formatter;

#[test_case(&["parse_temp.bin", "parse_data.bin"], 1; "parse sample")]
#[test_case(&["parse_temp_1.bin", "dns_samp.bin"], 4; "nprobe dns sample")]
#[test_case(&["parse_temp_2.bin","http_samp.bin"], 4; "nprobe http sample")]
fn test_round_trip(filenames: &[&'static str], alignment: u8) -> binrw::BinResult<()> {
    let templates = Rc::new(RefCell::new(HashMap::new()));
    let formatter = Rc::new(get_default_formatter());

    for filename in filenames {
        let path: std::path::PathBuf = [env!("CARGO_MANIFEST_DIR"), "resources", "tests", filename]
            .iter()
            .collect();
        let file_bytes = std::fs::read(path)?;

        let msg = parse_ipfix_message(&file_bytes, templates.clone(), formatter.clone())?;
        let mut writer = Cursor::new(Vec::new());
        msg.write_args(
            &mut writer,
            (templates.clone(), formatter.clone(), alignment),
        )?;
        similar_asserts::assert_eq!(expected: file_bytes, actual: writer.into_inner().as_slice());
    }

    Ok(())
}