3 个版本 (破坏性更新)

0.3.1 2022 年 5 月 18 日
0.2.0 2020 年 10 月 19 日
0.1.0 2020 年 9 月 22 日

#1150 in 解析器实现

每月 21 次下载

MIT 许可证

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)

在使用之前需要定义宏,最好在文件开始处定义,在任何变量之前。

宏标识符也可以用作变量标识符。

无运行时依赖