#ini-parser #config-parser #parser #configuration #no-std

不使用 std ini-roundtrip

快速格式保留(往返)INI 解析器

4 个版本

0.1.3 2024年2月12日
0.1.2 2023年6月19日
0.1.1 2023年4月20日
0.1.0 2023年3月20日

#1655 in 解析器实现

Download history 129/week @ 2024-03-31 280/week @ 2024-04-07 353/week @ 2024-04-14 133/week @ 2024-04-21 222/week @ 2024-04-28 406/week @ 2024-05-05 122/week @ 2024-05-12 245/week @ 2024-05-19 91/week @ 2024-05-26 301/week @ 2024-06-02 135/week @ 2024-06-09 68/week @ 2024-06-16 101/week @ 2024-06-23 189/week @ 2024-06-30 80/week @ 2024-07-07 229/week @ 2024-07-14

每月605次下载
2 个 crate 中使用(通过 ini-merge

MIT 许可证

29KB
697

快速格式保留(往返)INI 解析器

[ crates.io ] [ lib.rs ] [ docs.rs ]

ini-roundtrip 是一个快速格式保留(往返)流式 INI 解析器,旨在处理任意 INI 文件。

代码灵感来源于且主要基于 ini_core

MSRV

当前最低支持的 Rust 版本为 1.70.0。这可能需要更新。MSRV 提升不被视为 semver 破坏性变更。


lib.rs:

格式保留 Ini 流式解析器

具有以下功能的简单 INI 解析器

功能

  • 格式保留(您可以将其写出来并得到相同的结果)
  • 快速!
  • 流式处理
  • no_std 支持

注意事项

  • 在 [Item] 的 Display 特质上 保留格式,如果您需要这样做,请确保使用 raw 属性来提取原始行。
  • 不保存换行符。由调用者负责跟踪使用的换行符类型。在加载时支持混合换行符(例如 CR、CRLF 和 LF 的混合),但在保存时不支持。

示例

use ini_roundtrip as ini;

let document = "\
[SECTION]
;this is a comment
Key = Value  ";

let elements = [
ini::Item::SectionEnd,
ini::Item::Section{name: "SECTION", raw: "[SECTION]"},
ini::Item::Comment{raw: ";this is a comment"},
ini::Item::Property{key: "Key", val: Some("Value"), raw: "Key = Value  "},
ini::Item::SectionEnd,
];

for (index, item) in ini::Parser::new(document).enumerate() {
assert_eq!(item, elements[index]);
}

在新的部分之前和文档末尾返回 SectionEnd 伪元素。这有助于在属性解析完成后处理部分。

解析器非常基于行,无论发生什么情况都会继续,并以项目返回无意义的内容。

use ini_roundtrip as ini;

let document = "\
[SECTION
nonsense";

let elements = [
ini::Item::SectionEnd,
ini::Item::Error("[SECTION"),
ini::Item::Property{key: "nonsense", val: None, raw: "nonsense"},
ini::Item::SectionEnd,
];

for (index, item) in ini::Parser::new(document).enumerate() {
assert_eq!(item, elements[index]);
}

[ 开头的行,如果包含没有闭合的 ] 或者闭合的 ] 后面没有换行符,则返回为 Item::Error。缺少 = 的行返回为 Item::Property,其值为 None。更多信息请见下文。

格式

INI 是一个定义不严格的格式,该解析器尽可能少做假设,但它确实做出了决定。

  • 换行符可以是 "\r\n""\n""\r"。它们可以在单个文档中混合使用,但不建议这样做。
  • 节标题格式为 "[" section "]" 换行符section 可以是任何内容,但不能包含换行符。
  • 属性格式为 key "=" value 换行符keyvalue 可以是任何内容,但不能包含换行符。
  • 注释是以下划线 ;# 开头的原始行。
  • 空白只是 换行符

填充空白总是被裁剪,但原始行始终被存储。

不对输入进行进一步处理,例如,如果需要转义序列,它们必须由调用者处理。

依赖项