#autosar #automotive #file-format #data-model #data-structures #arxml

autosar-data-specification

Autosar arxml 文件格式的 Rust 数据结构规范

12 个重大发布

新增 0.14.0 2024年8月16日
0.13.0 2024年5月19日
0.12.0 2023年12月14日
0.11.1 2023年9月27日
0.3.0 2022年10月19日

#344 in 解析器实现

Download history 18/week @ 2024-04-29 1/week @ 2024-05-06 187/week @ 2024-05-13 55/week @ 2024-05-20 8/week @ 2024-06-03 17/week @ 2024-06-10 4/week @ 2024-06-17 28/week @ 2024-06-24 121/week @ 2024-07-08 2/week @ 2024-07-15 16/week @ 2024-07-29 592/week @ 2024-08-05 662/week @ 2024-08-12

1,270 每月下载量
用于 autosar-data

MIT/Apache

5.5MB
44K SLoC

autosar-data-specification

Crates.io Github Actions codecov

该crate存在是为了支持autosar-data crate。

Autosar数据模型最初以.xsd文件形式指定 - 每个标准版本一个。所有这些单独的xsd文件都被解析成数据结构并合并;该crate包含了所有20个Autosar 4标准版本的合并规范数据。

支持的标准

xsd 文件名 描述
AUTOSAR_4-0-1.xsd AUTOSAR 4.0.1
AUTOSAR_4-0-2.xsd AUTOSAR 4.0.2
AUTOSAR_4-0-3.xsd AUTOSAR 4.0.3
AUTOSAR_4-1-1.xsd AUTOSAR 4.1.1
AUTOSAR_4-1-2.xsd AUTOSAR 4.1.2
AUTOSAR_4-1-3.xsd AUTOSAR 4.1.3
AUTOSAR_4-2-1.xsd AUTOSAR 4.2.1
AUTOSAR_4-2-2.xsd AUTOSAR 4.2.2
AUTOSAR_4-3-0.xsd AUTOSAR 4.3.0
AUTOSAR_00042.xsd AUTOSAR Adaptive 17-03
AUTOSAR_00043.xsd AUTOSAR Adaptive 17-10
AUTOSAR_00044.xsd AUTOSAR Classic 4.3.1
AUTOSAR_00045.xsd AUTOSAR Adaptive 18-03
AUTOSAR_00046.xsd AUTOSAR Classic 4.4.0 / Adaptive 18-10
AUTOSAR_00047.xsd AUTOSAR Adaptive 19-03
AUTOSAR_00048.xsd AUTOSAR 4.5.0
AUTOSAR_00049.xsd AUTOSAR R20-11
AUTOSAR_00050.xsd AUTOSAR R21-11
AUTOSAR_00051.xsd AUTOSAR R22-11
AUTOSAR_00052.xsd AUTOSAR R23-11

使用 crate

主要数据类型是 ElementType。每个 arxml 文件根部的 <AUTOSAR> 元素的类型可作为 ElementType::ROOT 使用。

示例

use autosar_data_specification::*;
use std::str::FromStr;

let root_type = ElementType::ROOT;
// parsing an element
let element_name_text = "AR-PACKAGES";
let element_name = ElementName::from_str(element_name_text).unwrap();
assert_eq!(element_name, ElementName::ArPackages);

let version_mask = AutosarVersion::Autosar_4_3_0 as u32;
if let Some((element_type, index_list)) = root_type.find_sub_element(
    element_name,
    version_mask
) {
    // parsing an attribute
    let attribute_name = AttributeName::from_str("UUID").unwrap();
    if let Some(attribute_spec) = element_type.find_attribute_spec(attribute_name) {
        // ...
    }
    // ...
}

依赖项