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 在 解析器实现
每月下载量 98
63KB
1.5K SLoC
HAProxy 配置
解析 HAProxy 配置并轻松查询
另请参阅
HAProxy 配置文件的解析器。HAProxy 的配置有众多选项,可以构建一个完全类型化的 API。这样的 API 对配置的变化也很脆弱。因此,这个 crate 提供了一个松散类型化的配置。
它解析为包含 lines
的 sections
,从中可以创建一个 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(§ions).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