2 个版本
0.2.1 | 2020年6月19日 |
---|---|
0.2.0 | 2020年2月12日 |
#2 in #lcm
21KB
311 行
rust-lcm-codec
Rust 对 LCM 数据格式 读取和写入的支持。
概述
rust-lcm-codec
是一个 Rust 项目,用于与 LCM 编码数据交互。该项目不支持 LCM 的其他方面,如 RPC 机制。
rust-lcm-codec
API 是从 rust-lcm-codec
运行时库以及由 rust-lcm-codegen 从您的 LCM 类型规范 数据定义/模式生成的代码组合而成的。
待办事项
- 适用于
no_std
,无全局分配器(即嵌入式)用例。 - 基于稳定版 Rust 构建。
- 最小化反序列化性能成本。
- 通过使用会话类型来最大化反序列化正确性。
- 生成的代码中无 rustc 或 clippy 警告。
- 支持多维数组。
- 严格测试跨实现兼容性。
入门指南
此项目需要 Rust(稳定)工具链。Rust 推荐的工具链管理系统是 rustup。
rust-lcm-codec
的工作流程有两个关键组件:
- 设置
build.rs
以使用rust-lcm-codegen
生成 API 代码。 - 使用生成的
rust-lcm-codec
API 与 LCM 编码数据交互。
用法
rust-lcm-codegen
设置
将以下依赖项添加到 Rust 项目的 Cargo.toml
[dependencies]
rust-lcm-codec = "0.1.0"
[build-dependencies]
rust-lcm-codegen = "0.1.0"
在 Rust 项目的 build.rs
文件中导入 rust-lcm-codegen:generate
,并将 generate
函数指向您的 .lcm
模式和生成的代码所需的位置
use rust_lcm_codegen::generate;
use std::env;
use std::fs::File;
use std::io::Read;
use std::path::Path;
fn main() {
println!("cargo:rerun-if-changed=../schemas");
println!("cargo:rerun-if-changed=../../src");
println!("cargo:rerun-if-changed=../../../rust-lcm-codegen");
let schema_files = vec![
"./schemas/example_schema_a.lcm",
"path/to/schemas/example_schema_b.lcm",
];
let out_dir = env::var("OUT_DIR").expect("OUT_DIR");
let out_path = Path::join(Path::new(&out_dir), "generated_lcm_api.rs");
generate(schema_files, &out_path);
}
将生成的 API 包含在 Rust 项目的代码中
#![allow(non_snake_case)]
include!(concat!(env!("OUT_DIR"), "/generated_lcm_api.rs"));
生成的 API
基于上述设置,从您的LCM模式生成的类型和API将存储在generated_lcm_api.rs
文件中,该文件位于您最后一次执行cargo build
或cargo test
的OUT_DIR
目录中。
您可以使用以下方法找到此文件的路径
find ./target/ -name generated_lcm_api.rs -printf "%T@ %Tc %p\n" | sort -n
列表末尾引用的文件将是最新生成的文件。
有关如何使用生成的crate暴露的de/serializers的更多示例,请参阅测试,该crate包含与本项目一起提供的模式。
测试
要运行此项目的测试,请确保您位于/rust-lcm-codec
目录,然后运行
cargo test
许可证
有关更多详细信息,请参阅LICENSE。
版权所有 2020 Auxon Corporation
根据Apache许可证版本2.0(“许可证”)许可;除非您遵守许可证规定,否则不得使用此文件。您可以在以下位置获得许可证的副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证的具体语言、许可和限制,请参阅许可证。