Crates.io | generator-combinator |
lib.rs | generator-combinator |
version | 0.4.0 |
source | src |
created_at | 2021-01-08 16:51:39.657695 |
updated_at | 2022-04-17 21:45:26.502993 |
description | Composes combinators to generate patterns of increasing complexity |
homepage | https://github.com/aeshirey/generator-combinator/ |
repository | https://github.com/aeshirey/generator-combinator/ |
max_upload_size | |
id | 334393 |
size | 66,812 |
Provides parser-combinator-like combinable text generation in Rust.
You can add this crate to your Rust project with generator-combinator = "0.4.0"
. Documentation on docs.rs and crates.io listing.
To generate street address-like input, only a few components are required. We can quickly produce a range of nearly 1B possible values that can be fully iterated over or randomly sampled:
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
This library is 0.4.0 - there may be issues, functionality may be incomplete, etc.
.transform
to address this, if desired.Fn
variants of Generator
Generator
post-processing of component strings (eg, to strip leading zeros) before combining outputLicensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.