16 个版本 (重大更新)
新增 0.14.0 | 2024 年 8 月 16 日 |
---|---|
0.13.0 | 2024 年 5 月 19 日 |
0.12.1 | 2024 年 2 月 1 日 |
0.12.0 | 2023 年 12 月 14 日 |
0.3.0 | 2022 年 10 月 19 日 |
在 解析器实现 中排名第 851
每月下载量 215
6MB
52K SLoC
autosar-data
该软件包提供读取、修改和写入 Autosar 4 arxml 文件的功能,无论是单独的还是由多个文件组成的工程项目。
功能
- 读取和编写 arxml 文件
- 加载时完全验证所有数据
- 非严格模式,以便可以加载结构上合理但无效的数据
- 各种元素操作以修改和创建子元素、数据和属性
- 支持 Autosar 路径和交叉引用
- 所有操作都是线程安全的,例如,可以在单独的线程上加载多个文件
- 支持 Autosar 版本 4.0.1 及以上。
示例
use autosar_data::*;
/* load a multi-file data model */
let model = AutosarModel::new();
let (file_1, warnings_1) = model.load_file("some_file.arxml", false)?;
let (file_2, warnings_2) = model.load_file("other_file.arxml", false)?;
/* load a buffer */
let (file_3, _) = model.load_buffer(buffer, "filename.arxml", true)?;
/* write all files of the model */
model.write()?;
/* alternatively: */
for file in model.files() {
let file_data = file.serialize();
// do something with file_data
}
/* iterate over all elements in all files */
for (depth, element) in model.elements_dfs() {
if element.is_identifiable() {
/* the element is identifiable using an Autosar path */
println!("{depth}: {}, {}", element.element_name(), element.path()?);
} else {
println!("{depth}: {}", element.element_name());
}
}
/* get an element by its Autosar path */
let pdu_element = model.get_element_by_path("/Package/Mid/PduName").unwrap();
/* work with the content of elements */
if let Some(length) = pdu_element
.get_sub_element(ElementName::Length)
.and_then(|elem| elem.character_data())
.and_then(|cdata| cdata.string_value())
{
println!("Pdu Length: {length}");
}
/* modify the attributes of an element */
pdu_element.set_attribute_string(AttributeName::Uuid, "12ab34cd-1234-1234-1234-12ab34cd56ef");
pdu_element.remove_attribute(AttributeName::Uuid);
示例程序
可以在源代码仓库的 examples 目录中找到两个完整的示例程序。它们是:
- businfo,它从 Autosar ECU 提取有关总线设置、帧、PDU 和信号的信息
- generate_files,为每个 Autosar 版本生成一个 arxml 文件,其中至少包含一个指定元素的实例
依赖关系
~1.5–8MB
~47K SLoC