#lcm #data #generated #reading #format #encoded

rust-lcm-codec

Rust 对读取和写入 LCM 数据格式的支持

2 个版本

0.2.1 2020年6月19日
0.2.0 2020年2月12日

#2 in #lcm

Apache-2.0

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 的工作流程有两个关键组件:

  1. 设置 build.rs 以使用 rust-lcm-codegen 生成 API 代码。
  2. 使用生成的 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 buildcargo testOUT_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

除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证的具体语言、许可和限制,请参阅许可证。

无运行时依赖