random-data 0.1.1

A library tool to generate random data of any kind.
Documentation
# random-data

[![GitHub](https://img.shields.io/badge/github-t--webber-blue.svg?logo=github)](https://github.com/t-webber/random-data)
[![Crates.io](https://img.shields.io/badge/crates.io-random--data-darkgreen.svg?logo=rust)](https://crates.io/crates/random-data)
[![Docs.rs](https://img.shields.io/badge/docs.rs-random--data-brown.svg?logo=rust)](https://docs.rs/random-data)
[![License: MIT OR Apache-2.0](https://img.shields.io/badge/license-MIT%20or%20Apache--2.0-red.svg)](LICENSE-MIT)
![Coverage](https://img.shields.io/badge/coverage--95%25-purple.svg)

A Rust library for generating realistic random data of any kind.

## Looking for a CLI?

Checkout the [`random-json`](https://github.com/t-webber/random-json) crate to use this data as a CLI. It let's you choose the data you want with a dropdown dialogue in the terminal, or lets you generate big amounts of data in one go from a JSON schema!

## Installation

```bash
cargo add random-data
```

## Usage

```rust
use random_data::{DataType, DataGenerator};

let mut generator = DataGenerator::default();

// Generate a random address
let address = DataType::Address.random(&mut generator);
println!("Address: {address}");

// Generate a random name
let name = DataType::FirstName.random(&mut generator);
println!("Name: {name}");

// Generate a random email
let email = DataType::Email.random(&mut generator);
println!("Email: {email}");

// Generate location data
let country = DataType::Country.random(&mut generator);
let coordinates = DataType::LatitudeLongitude.random(&mut generator);
println!("Location: {country} at {coordinates}");

// Generate technical data
let ip = DataType::Ipv4.random(&mut generator);
let mac = DataType::MacAddress.random(&mut generator);
println!("Network: IP {ip} MAC {mac}");

// List all the possible data types
let list = DataType::list_str();
println!("Possible data types: {list:?}");
```

## Checking Available Values

Some data types have predefined lists of values. You can access these lists:

```rust
use random_data::{DataGenerator, DataType};

let mut generator = DataGenerator::default();

// Check if a data type has a predefined list
if let Some(values) = DataType::Month.values() {
    println!("Available months: {:?}", values);
}

// Formula-based types return None
assert!(DataType::Address.values().is_none());

// Generate and verify
let month = DataType::Month.random(&mut generator);
let all_months = DataType::Month.values().unwrap();
assert!(all_months.contains(&month.as_ref()));
```

## Regional Data

The library includes region-specific generators:

```rust
use random_data::{DataGenerator, DataType};

let mut generator = DataGenerator::default();

// UK-specific data
let uk_address = DataType::UkAddress.random(&mut generator);
let uk_postcode = DataType::UkPostCode.random(&mut generator);
let uk_phone = DataType::UkPhoneNumber.random(&mut generator);

// French-specific data
let french_address = DataType::FrenchAddress.random(&mut generator);
let french_postcode = DataType::FrenchPostCode.random(&mut generator);
let french_phone = DataType::FrenchPhoneNumber.random(&mut generator);
```

## Available Data Types

- **Internet**: `EmailDomain`, `HttpStatusCode`, `MimeType`, `OpenSourceApp`, `TopLevelDomain`, `UserAgent`, `Ipv4`, `Ipv6`, `MacAddress`
- **Companies**: `CarBrand`, `CompanyName`, `Job`
- **Computer science**: `FileExtension`, `ProgrammingLanguage`, `ProgrammingParadigm`, `EditorColourTheme`, `ItDomain`, `DirPath`, `FileName`, `FilePath`, `Semver`, `SemverStable`, `SemverUnstable`
- **Famous people**: `Painter`, `Writer`, `Composer`, `Mathematician`, `Physician`, `Biologist`, `ComputerScientist`, `Philosopher`
- **Colours**: `HexColour`, `HslaColour`, `HslColour`, `RgbaColour`, `RgbColour`, `ColourName`
- **Geography**: `Latitude`, `LatitudeLongitude`, `Longitude`, `FrenchRiver`, `Country`, `City`, `Continent`, `CountryCode`, `Street`, `River`, `UkRiver`
- **Addresses**: `Address`, `FrenchAddress`, `FrenchPostCode`, `UkAddress`, `UkPostCode`, `FrenchStreet`, `FrenchRoadType`, `FrenchCounty`, `UsStateAbbr`, `UsState`, `UsRoads`, `UsRoadTypes`, `UkCountyCode`, `UkPostcodeArea`, `UkCounty`, `UkCity`, `UkRoadType`, `UkStreet`, `StreetNumber`
- **Science**: `ChemicalElement`, `MathematicalFunction`
- **Names**: `FirstName`, `FrenchFirstName`, `FrenchLastName`, `LastName`, `NameTitle`
- **Arts**: `LiteraryGenre`, `ArchitecturalStyle`, `MusicalGenre`, `MusicalInstrument`
- **Time**: `DaysOfWeek`, `Month`, `DaysOfWeekAbbr`, `MonthsAbbr`, `TimeZone`, `TimeUnit`, `AmPm`
- **Animals**: `Animal`, `Mammal`, `Bird`, `Insect`, `MythologicalCreature`, `Fish`, `Amphibian`, `Reptile`, `Mollusc`, `AnimalType`
- **Education**: `SchoolSubject`, `AcademicDiscipline`, `DegreesTitle`, `University`, `HistoricalBattle`, `Sport`
- **Primitives**: `AlphanumericCapitalChar`, `AlphanumericChar`, `Boolean`, `CapitalChar`, `Digit`, `LowerChar`
- **Personal data**: `CreditCard`, `Email`, `FrenchEmail`, `FrenchLicencePlate`, `FrenchPhoneNumber`, `NhsNumber`, `Password`, `PhoneNumber`, `SecuriteSociale`, `UkLicencePlate`, `UkPhoneNumber`
- **ISBNs**: `RandomIsbn10`, `RandomIsbn13`
- **Banks & finance**: `Bic`, `Iban`, `Isin`, `CurrencyName`, `CurrencySymbol`, `CurrencyCode`
- **Text**: `Word`, `Sentence`, `Paragraph`
- **Sky & space**: `Constellation`, `Planet`, `Star`, `Galaxy`, `CloudType`

> If you don't want all the data to be loaded in your binary, you can use the feature flags to disable those you don't want.