generator-combinator
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;
let space = from;
// 3-5 digits for the street number. If the generated value has leading 0s, trim them out
let number = .transform;
let directional = space.clone + oneof!;
let street_names = space.clone + oneof!;
let street_suffixes = space.clone + oneof!;
let address = number
+ directional.clone.optional // optional pre-directional
+ street_names
+ street_suffixes
+ directional.clone.optional; // optional post-directional
assert_eq!;
// With the 'with_rand' feature:
let addr_values = address.values;
println!; //Example: 344 W Yesler Way
println!; //Example: 702 NE Spring Ct N
println!; //Example: 803 SW Madison Way SE
This library is 0.4.0 - there may be issues, functionality may be incomplete, etc.
Known issues / nota bene
- Generated digits include leading zeros. Use
.transform
to address this, if desired.
TODO
- Consider including
Fn
variants ofGenerator
-
Generator
post-processing of component strings (eg, to strip leading zeros) before combining output
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
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.