6个版本 (3个破坏性版本)
0.4.0 | 2024年3月27日 |
---|---|
0.3.0 | 2024年3月22日 |
0.2.2 | 2024年3月13日 |
0.1.0 | 2024年3月12日 |
#271 在 解析器实现
每月下载量2,494
用于 c2pa
160KB
3K SLoC
jumbf
纯Rust编写的JUMBF (ISO/IEC 19566-5:2023) 解析器和构建器。
解析器
该解析器使用nom 解析器组合框架实现,并广泛使用零拷贝。由于该crate的解析功能依赖于 nom 和 thiserror,这些功能通过名为 parser
的crate功能门控,默认情况下已包含。
该crate在理解盒内容方面故意保持最小化。仅理解 jumb
(超级盒) 和 jumd
(描述盒) 内容。其他所有盒类型(包括JUMBF标准中描述的其他类型)的内容通常是特定于应用的,因此该内容的含义留给调用者。
use hex_literal::hex;
use jumbf::parser::{DescriptionBox, SuperBox};
let jumbf = hex!(
"0000002f" // box size
"6a756d62" // box type = 'jumb'
"00000027" // box size
"6a756d64" // box type = 'jumd'
"00000000000000000000000000000000" // UUID
"03" // toggles
"746573742e7375706572626f7800" // label
);
let (rem, sbox) = SuperBox::from_slice(&jumbf).unwrap();
assert!(rem.is_empty());
assert_eq!(
sbox,
SuperBox {
desc: DescriptionBox {
uuid: &[0; 16],
label: Some("test.superbox"),
requestable: true,
id: None,
hash: None,
private: None,
original: &jumbf[8..47],
},
child_boxes: vec!(),
original: &jumbf,
}
);
构建器
该crate还允许您构建JUMBF数据结构并将其序列化。
use std::io::Cursor;
use hex_literal::hex;
use jumbf::{builder::{DataBoxBuilder, SuperBoxBuilder}, BoxType};
const JSON_BOX_TYPE: BoxType = BoxType(*b"json");
const RANDOM_BOX_TYPE: BoxType = BoxType(*b"abcd");
let child_box1 = DataBoxBuilder::from_owned(
JSON_BOX_TYPE,
hex!("7b20226c6f636174696f6e223a20224d61726761"
"746520436974792c204e4a227d")
.to_vec(),
);
let child_box2 = DataBoxBuilder::from_borrowed(RANDOM_BOX_TYPE, b"ABCD");
let sbox = SuperBoxBuilder::new(&hex!("00000000000000000000000000000000"))
.add_child_box(child_box1)
.add_child_box(child_box2);
let mut jumbf = Cursor::new(Vec::<u8>::new());
sbox.write_jumbf(&mut jumbf).unwrap();
仅构建器依赖减少
该构建器可以单独构建,在该配置下没有第三方crate依赖。如果您只需要构建JUMBF数据结构并想减少编译时间开销,可以通过以下方式导入此crate来禁用 parser
功能:
jumbf = { version = "x.x", default-features = false }
贡献和反馈
我们欢迎对该项目的贡献。有关贡献、提供反馈以及关于正在进行的工作的信息,请参阅 贡献。
要求
该crate需要 Rust版本1.74.0 或更高版本。当需要新的Rust版本时,将发布此crate的新次要版本(1.x.0)。
支持的平台
该crate已在以下操作系统上进行了测试
- Windows(重要:Windows上仅支持MSVC构建链。我们欢迎PR以在Windows上启用GNU构建链支持。)
- MacOS(Intel和Apple硅芯片)
- 在x86和ARM v8(aarch64)上的Ubuntu Linux
许可证
jumbf
库同时遵循 MIT 许可协议和 Apache 许可协议(版本 2.0)。
请参阅 LICENSE-APACHE 和 LICENSE-MIT。
请注意,某些组件和依赖库的许可协议不同;请查看每个库和组件的许可协议以获取详细信息。
变更日志
有关从 Git 提交历史中得出的详细变更,请参阅 CHANGELOG。
依赖项
~0–325KB