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 每月下载量
27KB
739 行
acon
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)'。