2 个版本
0.0.2 | 2022 年 6 月 22 日 |
---|---|
0.0.1 | 2022 年 6 月 21 日 |
#2375 在 Rust 模式
70KB
1.5K SLoC
cri-ref: CRI 引用的 Rust 实现
该软件包根据仍在进行中的 关于约束设备 URI 的 Internet Draft 实现:CRIs。这些旨在取代无法承受重量级字符串处理的嵌入式设备中的 URI。
它既提供了一个具体实现(在 native_cbor
模块中),也提供了一个特质抽象(在 accessor
和 traits
模块中)。两者都还在变化中,并受实验的影响。特别是,在 iterator
中正在探索迭代特质接口(这将只允许访问所需的组件序列,但无需任何预解析成本)。一个待探索的具体类型是编码的 CBOR 数据的切片(在类型级别上可能区分已知良好和任意数据)。与当前基于堆的版本相比,这可能需要更多的访问成本,但可以不使用堆分配,并且通过迭代接口访问它应该与访问预解析数据一样快。
迄今为止对特质的实验表明,访问器接口可能足够好:当谨慎地处理内存时,编译器可以知道它是常量,可以删除重复的代码,例如在主机、路径和查询的顺序中寻找重复的代码。
关于将 CRIs 与 CoAP 消息链接的实验正在进行中:一个 CRI 可以转换为 CoAP 请求的选项以指示路径,响应可以更改请求 URI(例如,在评估组播响应时),响应中的数据可以相对于响应的基本 URI/CRI 进行解析以持久化或转换为新的 CoAP 请求——所有这些都不需要无用的分配或重新编码。
将其用作库
由于不稳定的 API 和尚未实现 no_std
,目前强烈不建议这样做。
CRI 功能
一旦这个库可用,它可能将保持相对完整的实现 — 支持百分号编码的文本以及所有其他使事情变得复杂的 .功能
。这些功能可以被映射到依赖的crates可以选择的Rust功能。预期嵌入式用户不会选择他们不需要的功能,并且当某些枚举变体不再可用时,相当一部分复杂性将自动被排除。
测试
在[草案仓库]中提供的测试套件通过 cargo test
进行评估。
依赖项
~5MB
~120K SLoC