7 个不稳定版本 (3 个破坏性更新)

0.4.1 2023年4月14日
0.4.0 2023年4月13日
0.3.0 2023年4月11日
0.2.2 2023年4月11日
0.1.2 2023年4月11日

#2624解析器实现

Download history 4/week @ 2024-03-10 23/week @ 2024-03-31 1/week @ 2024-04-07 6/week @ 2024-04-14 36/week @ 2024-04-28 22/week @ 2024-05-05 9/week @ 2024-05-19

每月下载量 98

MIT 许可证

63KB
1.5K SLoC

HAProxy 配置

解析 HAProxy 配置并轻松查询

Crates.io Crates.io Docs.rs License

另请参阅

HAProxy 配置文件的解析器。HAProxy 的配置有众多选项,可以构建一个完全类型化的 API。这样的 API 对配置的变化也很脆弱。因此,这个 crate 提供了一个松散类型化的配置。

它解析为包含 linessections,从中可以创建一个 Config 结构体。该结构体遵循 HAProxy 配置的章节。章节中的大多数选项都表示为 HashMap 中的键值字符串。重要的设置具有完整的类型化 API。

示例

从配置文件中列出 HAProxy 将绑定的所有端口。

use haproxy_config::parse_sections;
use haproxy_config::Config;

let file = include_str!("../tests/medium_haproxy.cfg");
let sections = parse_sections(file).unwrap();

let config = Config::try_from(&sections).unwrap();

let frontend_ports = config.frontends.values().map(|f| f.bind.addr.port);
let listen_ports = config.listen.values().map(|f| f.bind.addr.port);
let ports: Vec<_> = frontend_ports.chain(listen_ports).collect();

println!("ports bound to by haproxy: {ports:?}")

功能

  • 将配置段表示为基于零拷贝解析,保留配置行和任何注释的顺序。
  • 一个更严格的拥有表示,易于查询。
  • 在解析错误上有清晰的错误报告,具有一个调试格式化器,显示正在解析的配置的问题。
  • 无恐慌实现,此 crate 不会使您的代码崩溃。

不支持

由于 API 不是完全类型化的,该 crate 允许一些无效配置进行解析。特别是,任何无效的配置将被解释为配置值。章节在下一个章节或文件末尾结束,因此任何第一个章节之后的无效配置都将无法检测。

该 crate 会在具有 条件块 的有效配置上崩溃。

贡献

这个 crate 还远未完成,但涵盖了所有我自己的用例。然而,我欢迎任何贡献。

感谢

依赖关系

~1.2–1.8MB
~30K SLoC