allwords

Crates.ioallwords
lib.rsallwords
version0.1.2
sourcesrc
created_at2021-02-08 09:31:28.335664
updated_at2021-11-18 14:59:07.106399
descriptionGenerate all the words over a given alphabet
homepage
repositoryhttps://github.com/lmammino/allwords
max_upload_size
id352234
size23,728
Luciano Mammino (lmammino)

documentation

README

allwords 🦀

build badge codecov crates.io badge Documentation

allwords is a Rust crate that allows you to generate words over a given alphabet.

Word generation can be useful in several scenarios:

  • Pseudo-random data generation (e.g. testing / mocking)

  • Brute forcing of keys / passwords

  • Id or Serial number generation

Install

To install the library add the following lines to your Cargo.toml

[dependencies]
allwords = "0"

Or, if you have cargo add, you can run the following command:

cargo add allwords@0

Sample Usage

The basic idea for using this library is that you create an Alphabet with a set of characters and then you can use it to generate a WordsIterator. You can use the iterator to generate all the possible words over the alphabet.

For instance if you want to generate all the possible words containing "a", "b", "c" with a maximum length of 3 chars:

use allwords::{Alphabet};

let a = Alphabet::from_chars_in_str("abc").unwrap();

let words: Vec<String> = a.all_words(Some(3)).collect();

let expected_words: Vec<String> = [
    "a", "b", "c",
    "aa", "ab", "ac", "ba", "bb", "bc", "ca", "cb", "cc",
    "aaa", "aab", "aac", "aba", "abb", "abc", "aca", "acb", "acc",
    "baa", "bab", "bac", "bba", "bbb", "bbc", "bca", "bcb", "bcc",
    "caa", "cab", "cac", "cba", "cbb", "cbc", "cca", "ccb", "ccc"]
    .iter()
    .map(|s| s.to_string())
    .collect();

assert_eq!(words, expected_words);

WordsIterator

Once you create an alphabet a, there are 4 different ways to get an iterator:

Consult the crate documentation for more details and examples.

Contributing

Everyone is very welcome to contribute to this project. You can contribute just by submitting bugs or suggesting improvements by opening an issue on GitHub.

License

Licensed under MIT License. © Luciano Mammino.

Commit count: 19

cargo fmt