2 个不稳定版本
0.2.0 | 2024年5月16日 |
---|---|
0.1.0 | 2024年3月17日 |
#516 in 编码
每月下载量 107
40KB
1K SLoC
X12
有两个相关的包
x12_alt
,其中包含表示 x12 事务、段和元素的 struct。serde_x12_alt
,其中包含将数据序列化和反序列化为 x12 格式的 serde 实现。
示例
use serde_x12::{from_str, to_string};
use x12::Document;
use x12::release_5010::transactions::HealthCareClaim;
fn main() {
let x12 = include_str!("../data/CHPW_Claimdata.txt");
let doc = from_str::<Document<HealthCareClaim>>(&x12).unwrap();
let r = to_string(&doc).unwrap();
println!("{}", r);
}
此代码展示了读取,但不展示逐字节相同的输出,因为分隔符信息已丢失。(输入文件格式使用回车换行符 \r\n
作为视觉分隔符。)使用此代码进行逐字节相同的往返。
use serde_x12::{detect_format, from_str};
use x12::Document;
use x12::release_5010::transactions::HealthCareClaim;
fn main() {
let x12 = include_str!("../data/CHPW_Claimdata.txt");
let f = detect_format(x12).unwrap();
let doc = from_str::<Document<HealthCareClaim>>(&x12).unwrap();
let r = f.to_string(&doc).unwrap();
assert_eq!(x12, r);
}
安装
将以下内容添加到您的 Cargo.toml
[dependencies]
x12_alt = "0.1"
serde_x12_alt = "0.1"
分别使用 use x12::..
和 use serde_x12::..
来使用库。 alt
只是为了防止 crates.io
命名冲突。
讨论
x12
包目前没有尝试在不同版本之间共享 struct(例如,5010 与 8010)。这可能在未来的版本中得到修复。
它也没有尝试通过枚举统一它们,根据检测到 ISA
头中的版本进行反序列化。目前,该功能留给库用户。
警告
serde_x12
中有一个单独的 unsafe
使用。为了实现反序列化,库在反序列化可选内容时需要回溯,但 serde
API 似乎不支持这一点。代码通过了 miri
,但据我理解,保证 unsafe
是安全的不可变性的不变性不能由编译器强制执行。(具体来说,unsafe
使用需要一个零大小的泛型类型参数,但编译器无法对泛型施加有大小限制。)
完整细节 在此。
依赖关系
~0.4–10MB
~64K SLoC