#序列化 #编解码器 #解码 #数据 #极简主义 #反序列化 #编码

nightly acon

一个本地的 Rust ACON 编码和解码器。提供 FromStr 和 Display 用于分别进行反序列化和序列化。附带一些工具,使处理数据结构更加方便。

5 个不稳定版本

使用旧的 Rust 2015

0.5.2 2023年5月14日
0.5.1 2016年5月26日
0.5.0 2016年5月15日
0.4.0 2016年5月15日
0.3.3 2016年5月15日

#69 in #极简主义

46 每月下载量

GPL-3.0 许可证

27KB
739

acon

Build Status

文档

ACON 是一种极简主义的数据序列化语言。它代表 Awk-Compatible Object Notation,旨在使用 acon 工具进行命令行使用。

有关命令行工具和 awk 脚本,请参阅 acon

将 acon 包含到您的项目中。

# Cargo.toml
[dependencies]
acon = "0.5.0"

许可证

在 GNU GPLv3 许可下发布,请参阅 LICENSE.md 文件。


lib.rs:

一个 ACON 解析库

此软件包包含一个 ACON 到树的解析器,可以反序列化文本。它还可以将 ACON 树序列化为文本。

ACON 代表 Awk-Compatible Object Notation。它因其简单性和多功能性而被使用。

ACON 示例

key value
other-key value
and_yet_another_key and some values

键总是该行上的第一个单词。值由该行上剩余的所有单词组成,通过空白字符修剪。单词之间的任何多余空白都将变成单个空格。这种格式使得用 awk 处理它变得非常容易。

表格

{ table
  key value
}
{ other-table
  key value
}
key value

表格由该行上的第一个单词是一个花括号开头来表示。表格的名称是第二个单词。如果没有名称,则表格的名称为空。

数组

[ array-name
  here is a single value, every line is its own value
  this is the second entry
]

数组从该行上的第一个单词是一个方括号开头开始。数组没有键,只有值。数组是有序的。空行将变成空元素。在表中,空行将被简单地忽略。

超级分隔符

如果您有一些深度嵌套的结构,或者一个可能无法完成写入所有关闭分隔符的程序,您可以使用 '$' 作为分隔符。这将关闭所有打开的表格和数组。

{ deeply
   { nested
      [ arrays
$ <- we've had enough, anything after the $ on this line is skipped.

key value

点路径

可以使用点分隔的键路径检索所有值。

use acon::Acon;
let input = r#"
{ table
   key value
  [ my-array
    { subtable
      anything goes
    }
  ]
}"#;
let result = input.parse::<Acon>().unwrap();
assert_eq!(result.path("table.my-array.0.subtable.anything").unwrap().string(), "goes");

转义

如果您想在值中包含换行符或显式空白,则需要使用转义码。键中的点和空白也需要转义码。转义是通过插入 (数字) 来完成的,其中数字是数值代码点值。此库透明地处理转义。转义或反转转义对于其他工具或以其他方式查看数据是必要的。当使用点路径时,您仍然需要显式写出括号内的元素。

use acon::Acon;
let input = r#"
  key(32)with_space(46)and_dot value(10)with(10)new(10)lines, which is interesting
"#;
let result = input.parse::<Acon>().unwrap();
assert_eq!(result.path("key(32)with_space(46)and_dot").unwrap().string(), "value(10)with(10)new(10)lines, which is interesting");

注释

如果一行中的第一个单词是'#',则该行会被忽略。如果您需要该行为首单词,可以使用转义码 '(35)'。

无运行时依赖