1个不稳定版本
0.2.0 | 2020年10月19日 |
---|
#7 in #serializing
13KB
289 行
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"}
- 布尔值(true/false是布尔值的唯一有效标识符)
- 整数
- 十进制数字 - 使用点 '.' 作为小数分隔符
- 字符串 - 使用双引号,例如 "this is a string"
宏
宏被解析为HashMap
宏以 '@' 符号开头,后跟一个标识符和一系列参数。
例如:@identifier(argument1, argument2, argument3)
在它们被使用之前需要定义宏,最好在文件开始处,在所有变量之前。
宏标识符也可以用作变量标识符。
依赖关系
~1.5MB
~35K SLoC