4个版本 (破坏性更新)
0.4.0 | 2022年4月17日 |
---|---|
0.3.0 | 2021年6月6日 |
0.2.0 | 2021年4月14日 |
0.1.0 | 2021年1月8日 |
#95 在 解析工具
47KB
1K SLoC
generator-combinator
在Rust中提供类似于解析器组合子的可组合文本生成。
您可以使用以下命令将此crate添加到Rust项目中:generator-combinator = "0.4.0"
。有关docs.rs上的文档和crates.io上的列表。
要生成类似街道地址的输入,只需要几个组件。我们可以快速生成近10亿个可能的值,这些值可以被完全迭代或随机采样
use generator_combinator::Generator;
let space = Generator::from(' ');
// 3-5 digits for the street number. If the generated value has leading 0s, trim them out
let number = (Generator::Digit * (3, 5)).transform(|s| {
if s.starts_with('0') {
s.trim_start_matches('0').to_string()
} else {
s
}
});
let directional = space.clone() + oneof!("N", "E", "S", "W", "NE", "SE", "SW", "NW");
let street_names = space.clone() + oneof!("Boren", "Olive", "Spring", "Cherry", "Seneca", "Yesler", "Madison", "James", "Union", "Mercer");
let street_suffixes = space.clone() + oneof!("Rd", "St", "Ave", "Blvd", "Ln", "Dr", "Way", "Ct", "Pl");
let address = number
+ directional.clone().optional() // optional pre-directional
+ street_names
+ street_suffixes
+ directional.clone().optional(); // optional post-directional
assert_eq!(address.len(), 809_190_000);
// With the 'with_rand' feature:
let addr_values = address.values();
println!("Example: {}", addr_values.random()); //Example: 344 W Yesler Way
println!("Example: {}", addr_values.random()); //Example: 702 NE Spring Ct N
println!("Example: {}", addr_values.random()); //Example: 803 SW Madison Way SE
此库为0.4.0版本 - 可能存在问题,功能可能不完整等。
已知问题 / 注意事项
- 生成的数字包括前导零。如果需要,可以使用
.transform
来解决这个问题。
待办事项
- 考虑包括
Fn
变体Generator
-
Generator
在组合输出之前对组件字符串进行后处理(例如,删除前导零)
许可证
根据您的选择,许可协议为以下之一:
- Apache License,版本2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则您提交给工作的任何贡献,根据Apache-2.0许可证定义,均应按上述方式双重许可,不得附加任何其他条款或条件。
依赖关系
~72KB