4 个版本
0.1.3 | 2021年6月16日 |
---|---|
0.1.2 | 2020年9月23日 |
0.1.1 | 2020年9月22日 |
0.1.0 | 2020年9月8日 |
#2210 在 解析器实现
在 3 个crate中使用(通过 ogma-libs)
93KB
2.5K SLoC
自然语言结构化文档
自然语言结构化文档(NLSD)或简称NLSD,是可序列化和反序列化数据的英文表示。此类文档的目的是使数据及其理解相等。例如,当用户对数据(例如,使用加密签名)进行签字时,数据本身的展示就是他们所签的内容。
NLSD试图表示以下数据和数据类型
Null
Boolean
Number
String
List
Map
NamedList
NamedMap
Enum
空值
empty | nothing
布尔值
true | false | on | off | enabled | disabled
数字
0.0
字符串
`string`
字符串需要用 ``` 和 ``` 来转义
列表
the [empty] (list|`variant`) [henceforth `name`] [where an item is ___] [and another item [of `name`] is ___]
在反序列化变体时,如果存在,将转换为 UpperCamelCase
映射
the [empty] (object|`variant`) [henceforth `name`] [where [the] `key` is ___] [and [the] `key` [of `name`] is ___]
注意,当解析时,键
将被替换为snake_case
,以便于映射。
请注意,构建键值对时,the
是可选的。在序列化时,the
将始终放置,除非键
以is
开头,表示一个形容词(例如“is_enabled”)
枚举(新类型变体)
the `type` which is ___
名称
名称在反序列化嵌套结构时很重要。在反序列化时,必须处于作用域内的'name'
才能将对象与其父对象关联起来。当搜索'name'
时,反序列化器将遍历树以找到名称。当找到'name'
时,新作用域将设置为树的该级别。如果没有提供'name'
,则当前作用域
在将对象序列化为NLSD时,除非对象是树的叶节点,否则将添加'name'
,并且除非引用的作用域是当前作用域的父作用域,否则将添加到键/项的'name'
列表项的默认名称
[parent name] item [index number]
结构或映射项的默认名称
[parent name] [key]
其中,列表的根名称是“the list”,对象的根名称是“the object”,结构的根名称是结构名
示例
用户
struct User {
id: u32,
public_key: String,
}
let user = User { id: 1, public_key: "A7sg..." };
the `user` where the `id` is 1 and the `public key` is `A7sg...`
交易
struct Transaction {
from: String,
to: String,
amount: f64
}
let transactions = vec![
Transaction { from: "address1", to: "address2", amount: 10.2 },
Transaction { from: "address2", to: "address3", amount: 5.8 },
];
the list henceforth `the list` where an item is the `transaction` where the `from` is `address1` and the `to` is `address2` and the `amount` is 10.2 and another item of `the list` is the `transaction` where the `from` is `address2` and the `to` is `address3` and the `amount` is 5.8
依赖项
~205–500KB
~10K SLoC