三方库设计说明
1 需求场景分析
TOML 是一种由于明显的语义而易于阅读的最小配置文件格式。它明确映射到哈希表。TOML 应该易于解析为各种语言的数据结构。 TOML 与用于应用程序配置和数据序列化的其他文件格式共享特征,例如 YAML 和 JSON。TOML 和 JSON 都很简单,并且使用无处不在的数据类型,使它们易于编码或用机器解析。TOML 和 YAML 都强调人类可读性功能,例如使给定行的目的更容易理解的注释。TOML 在组合这些方面有所不同,允许注释(与 JSON 不同)但保持简单性(与 YAML 不同)。
因为 TOML 明确地打算作为一种配置文件格式,所以解析它很容易,但它不打算用于序列化任意数据结构。TOML 在文件的顶层总是有一个哈希表,它可以很容易地将数据嵌套在它的键中,但它不允许顶层数组或浮点数,因此它不能直接序列化一些数据。也没有标准来识别 TOML 文件的开始或结束,这会使通过流发送文件变得复杂。这些细节必须在应用层协商。
INI 文件经常与 TOML 进行比较,因为它们在语法上的相似性和用作配置文件。然而,INI 没有标准化的格式,它们不能优雅地处理超过一或两层的嵌套。
进一步阅读:
TOML 规范: https://toml.io/en/
YAML 规范:https://yaml.org/spec/1.2/spec.html
JSON 规范:https://tools.ietf.org/html/rfc8259
2 三方库对外提供的特性
(1) 用于实现 toml 文件的解码和编码
(2) 简洁且归一化的接口
(3) 支持裸键
(4) 支持 整数/ 浮点数/ 字符串(多行字符串不支持)/ 布尔类型的字面量.
(5) 不支持 引号键和分隔符键(父键丢失)
(6) 不支持 [table] 表
(7) 不支持进制转换
(8) 不支持value为多行字符串
(9) 不支持array数组表
3 License分析
MIT License
| Permissions | Limitations |
|---|---|
| Commercial use | Liability |
| Modification | Warranty |
| Distribution | |
| Private use |
4 依赖分析
标准库
import std.io.*
import std.collection.*
import std.regex.*
import std.unicode.*
import std.convert.*
import std.time.*
import encoding.json.*
import serialization.serialization.*
5 特性设计文档
仓颉TOML实现是基于String和文件FIle实现对TOML配置的解析. 通过使用String的切割/索引/转换/拆分等函数功能实现toml文件解析成json格式.
5.1 接口设计
💡 decoder toml文件解码器
| 成员函数 | 入参 | 返回值 | 作用描述 |
|---|---|---|---|
| init | / | Decoder | 创建toml解码器对象 |
| load | string | Unit | 用于加载toml文件路径字符串 |
| load | File | Unit | 用于加载toml文件File对象 |
| decode | / | JsonObject | 解码并生成JsonObject |
💡 TomlTz toml 解码器和编码器 时间格式生成工具类.
| 成员函数 | 入参 | 返回值 | 作用描述 |
|---|---|---|---|
| init | String | TomlTz | 创建TomlTz对象 |
| tzname | / | String | 返回时区和偏移量的字符串 |
| utcOffset | / | Duration | 返回UTC时区+偏移量的时间间隔 |
| dst | / | Duration | 返回时间间隔 |
| location | / | Location | 返回时区和偏移量的时区信息 |
5.2 展示示例
integer002.toml文件
key = "value"
bare_key = "value"
bare-key = "value"
1234 = "value"
import toml4cj.decoders.*
main() {
let decoder: Decoder = Decoder()
decoder.load("integer002.toml")
let a = decoder.decode()
println(a)
}
{"key":"value","bare_key":"value","bare-key":"value","1234":"value"}
🚀 6 架构图
