#fake-data #random #generator #faker

fake

An easy to use library for generating fake data like name, number, address, lorem, dates, etc

28 stable releases (3 major)

3.0.1 Nov 7, 2024
2.10.0 Sep 25, 2024
2.9.2 Dec 20, 2023
2.9.1 Oct 25, 2023
0.4.0 Jul 18, 2016

#4 in Development tools

Download history 52890/week @ 2024-08-21 52507/week @ 2024-08-28 59701/week @ 2024-09-04 56819/week @ 2024-09-11 51440/week @ 2024-09-18 57842/week @ 2024-09-25 53680/week @ 2024-10-02 49742/week @ 2024-10-09 64946/week @ 2024-10-16 67839/week @ 2024-10-23 63925/week @ 2024-10-30 63308/week @ 2024-11-06 70068/week @ 2024-11-13 68302/week @ 2024-11-20 62429/week @ 2024-11-27 54412/week @ 2024-12-04

267,204 downloads per month
Used in 172 crates (159 directly)

MIT/Apache

385KB
10K SLoC

Fake

Build Status Latest Version

A Rust library for generating fake data.

Installation

Default:

[dependencies]
fake = { version = "3.0.0", features = ["derive"] }

Available features:

  • derive: if you want to use #[derive(Dummy)]
  • supported crates feature flags:
    • chrono
    • chrono-tz
    • http
    • uuid
    • bigdecimal (via bigdecimal-rs)
    • rust_decimal
    • random_color
    • geo
    • semver
    • serde_json
    • time
    • zerocopy
    • glam
    • url
  • always-true-rng: expose AlwaysTrueRng
  • maybe-non-empty-collections: allow to use AlwaysTrueRng to generate non-empty collections

Usage

use fake::{Dummy, Fake, Faker};
use rand::rngs::StdRng;
use rand::SeedableRng;

#[derive(Debug, Dummy)]
pub struct Foo {
    #[dummy(faker = "1000..2000")]
    order_id: usize,
    customer: String,
    paid: bool,
}

#[derive(Debug, Dummy)]
struct Bar<T> {
    field: Vec<T>,
}

fn main() {
    // type derived Dummy
    let f: Foo = Faker.fake();
    println!("{:?}", f);

    let b: Bar<Foo> = Faker.fake();
    println!("{:?}", b);

    // using `Faker` to generate default fake value of given type
    let tuple = Faker.fake::<(u8, u32, f32)>();
    println!("tuple {:?}", tuple);
    println!("String {:?}", Faker.fake::<String>());

    // types U can used to generate fake value T, if `T: Dummy<U>`
    println!("String {:?}", (8..20).fake::<String>());
    println!("u32 {:?}", (8..20).fake::<u32>());

    // using `faker` module with locales
    use fake::faker::name::raw::*;
    use fake::locales::*;

    let name: String = Name(EN).fake();
    println!("name {:?}", name);

    let name: String = Name(ZH_TW).fake();
    println!("name {:?}", name);

    // using convenient function without providing locale
    use fake::faker::lorem::en::*;
    let words: Vec<String> = Words(3..5).fake();
    println!("words {:?}", words);

    // using macro to generate nested collection
    let name_vec = fake::vec![String as Name(EN); 4, 3..5, 2];
    println!("random nested vec {:?}", name_vec);

    // fixed seed rng
    let seed = [
        1, 0, 0, 0, 23, 0, 0, 0, 200, 1, 0, 0, 210, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0,
    ];
    let ref mut r = StdRng::from_seed(seed);
    for _ in 0..5 {
        let v: usize = Faker.fake_with_rng(r);
        println!("value from fixed seed {}", v);
    }
}

Fakers with locale

Lorem

Word();
Words(count: Range<usize>);
Sentence(count: Range<usize>);
Sentences(count: Range<usize>);
Paragraph(count: Range<usize>);
Paragraphs(count: Range<usize>);

Name

FirstName();
LastName();
Title();
Suffix();
Name();
NameWithTitle();

Number

Digit();
NumberWithFormat<'a>(fmt: &'a str);

Boolean

Boolean(ratio: u8);

Internet

FreeEmailProvider();
DomainSuffix();
FreeEmail();
SafeEmail();
Username();
Password(len_range: Range<usize>);
IPv4();
IPv6();
IP();
MACAddress();
UserAgent();

HTTP

RfcStatusCode();
ValidStatusCode();

Color

HexColor();
RgbColor();
RgbaColor();
HslColor();
HslaColor();
Color();

Company

CompanySuffix();
CompanyName();
Buzzword();
BuzzwordMiddle();
BuzzwordTail();
CatchPhrase();
BsVerb();
BsAdj();
BsNoun();
Bs();
Profession();
Industry();

Address

CityPrefix();
CitySuffix();
CityName();
CountryName();
CountryCode();
StreetSuffix();
StreetName();
TimeZone();
StateName();
StateAbbr();
SecondaryAddressType();
SecondaryAddress();
ZipCode();
PostCode();
BuildingNumber();
Latitude();
Longitude();
Geohash(precision: u8);

Automotive

LicencePlate();

Barcode

Isbn();
Isbn13();
Isbn10();

Phone Number

PhoneNumber();
CellNumber();

Date/Time

Time();
Date();
DateTime();
Duration();
DateTimeBefore(dt: DateTime<Utc>);
DateTimeAfter(dt: DateTime<Utc>);
DateTimeBetween(start: DateTime<Utc>, end: DateTime<Utc>);

Filesystem

FilePath();
FileName();
FileExtension();
DirPath();

Finance

Bic();

UUID

UUIDv1();
UUIDv3();
UUIDv4();
UUIDv5();

LICENSE

This project is licensed under either of

at your option.

Dependencies

~0.4–4.5MB
~85K SLoC