#fake-data #data #generator #faker

fake

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

25 stable releases

2.9.2 Dec 20, 2023
2.9.1 Oct 25, 2023
2.8.0 Aug 21, 2023
2.6.1 May 6, 2023
0.4.0 Jul 18, 2016

#5 in Development tools

Download history 36563/week @ 2024-01-10 42011/week @ 2024-01-17 42064/week @ 2024-01-24 44096/week @ 2024-01-31 41793/week @ 2024-02-07 44103/week @ 2024-02-14 41710/week @ 2024-02-21 42142/week @ 2024-02-28 47034/week @ 2024-03-06 49123/week @ 2024-03-13 46528/week @ 2024-03-20 36345/week @ 2024-03-27 43490/week @ 2024-04-03 41670/week @ 2024-04-10 47358/week @ 2024-04-17 38669/week @ 2024-04-24

180,658 downloads per month
Used in 148 crates (135 directly)

MIT/Apache

345KB
8K SLoC

Fake

Build Status Latest Version

A Rust library for generating fake data.

Installation

Default:

[dependencies]
fake = { version = "2.9.2", 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
  • 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();
CatchPhase();
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–2.8MB
~56K SLoC