autosar-data 0.22.0

read, write and modify Autosar arxml data
Documentation
use autosar_data::*;
use criterion::{Criterion, criterion_group, criterion_main};
use std::fmt::Write;

fn create_elements_a() {
    let model = AutosarModel::new();
    let _file = model.create_file("file", AutosarVersion::LATEST);
    let packages = model
        .root_element()
        .create_sub_element(ElementName::ArPackages)
        .unwrap();
    let package = packages
        .create_named_sub_element(ElementName::ArPackage, "package")
        .unwrap();
    let elements = package.create_sub_element(ElementName::Elements).unwrap();

    let sub_elem_info = elements.list_valid_sub_elements();

    let mut name = String::with_capacity(20);
    let mut seq_id = 0;
    for ValidSubElementInfo {
        element_name,
        is_named,
        is_allowed,
    } in sub_elem_info
    {
        for _ in 0..4 {
            name.clear();
            seq_id += 1;
            write!(name, "element_{seq_id}").unwrap();
            if is_allowed {
                if is_named {
                    elements.create_named_sub_element(element_name, &name).unwrap();
                } else {
                    elements.create_sub_element(element_name).unwrap();
                }
            }
        }
    }
}

fn create_elements_b() {
    let model = AutosarModel::new();
    let _file = model.create_file("file", AutosarVersion::LATEST);
    let packages = model
        .root_element()
        .create_sub_element(ElementName::ArPackages)
        .unwrap();
    let package = packages
        .create_named_sub_element(ElementName::ArPackage, "package")
        .unwrap();
    let elements = package.create_sub_element(ElementName::Elements).unwrap();

    let sub_elem_info = elements.list_valid_sub_elements();

    let mut name = String::with_capacity(20);
    let mut seq_id = 0;
    for _ in 0..4 {
        for ValidSubElementInfo {
            element_name,
            is_named,
            is_allowed,
        } in &sub_elem_info
        {
            name.clear();
            seq_id += 1;
            write!(name, "element_{seq_id}").unwrap();
            if *is_allowed {
                if *is_named {
                    elements.create_named_sub_element(*element_name, &name).unwrap();
                } else {
                    elements.create_sub_element(*element_name).unwrap();
                }
            }
        }
    }
}

pub fn criterion_benchmark(c: &mut Criterion) {
    c.bench_function("create_elements (a)", |b| b.iter(create_elements_a));
    c.bench_function("create_elements (b)", |b| b.iter(create_elements_b));
}

criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);