3 个版本 (破坏性更新)
0.3.1 | 2022 年 5 月 18 日 |
---|---|
0.2.0 | 2020 年 10 月 19 日 |
0.1.0 | 2020 年 9 月 22 日 |
#1150 in 解析器实现
每月 21 次下载
56KB
1.5K SLoC
AEON
⚠ 工作,但不是生产就绪
非常令人兴奋的对象表示法
示例文件
@server(id, name, ip, port)
servers: [
server(1, "test", 127.0.0.1, 7171),
server(2, "production", 0.0.0.0, 8080),
]
用法
/* using derive macro */
use aeon::convert_panic::*;
use aeon::*;
use aeon_derive::{Deserialize,Serialize};
#[derive(Serialize, Deserialize, Debug)]
pub struct Heuristic{
pub value: String,
pub weight: i32,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct WithHeuristics {
pub something: Vec<Heuristic>,
pub else: bool,
}
// deserialize:
let heuristics = WithHeuristics::from_aeon(some aeon string here);
// serialize:
println!("{}", WithHeuristics::to_aeon(&heuristics));
// would print something similar to:
/*
@heuristic(value, weight)
something: [
heuristic("some_name", 10),
heuristic("some_other_name", 19),
]
else: false
*/
/* typing it out manually */
use aeon::*;
use aeon::convert_panic::*; // there's also aeon::convert::* if you prefer Option<T> over panics
let servers = aeon::deserialize(data).get("servers").list();
println!("{:?}", servers);
// there's also get_path("path/to/value") functions
注释
注释以 '#' 符号开始。
# comments are allowed on their own lines
thing: "text" # and at the end of lines
在执行反序列化 -> 序列化操作时,不会 序列化注释,这可能在将来改变
支持类型
- 列表 - ["One", 2, 3]
- 映射 - {"one": 1, "a": "b", name: "a name"}
- 布尔值(true/false 是布尔值的唯一有效标识符)
- 整数
- 十进制数字 - 使用点 '.' 作为小数分隔符
- 字符串 - 使用双引号,例如 "这是一个字符串"
宏
宏被解析为 HashMap
宏以 '@' 符号开始,后跟一个标识符和一系列参数。
例如:@identifier(argument1, argument2, argument3)
在使用之前需要定义宏,最好在文件开始处定义,在任何变量之前。
宏标识符也可以用作变量标识符。