#faker #data #generator #random

fake

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

15 releases (stable)

✓ Uses Rust 2018 edition

2.2.2 Mar 29, 2020
2.2.0 Jul 16, 2019
1.3.0 Apr 29, 2019
1.2.2 May 2, 2018
0.4.0 Jul 18, 2016

#4 in Algorithms

Download history 276/week @ 2020-02-09 401/week @ 2020-02-16 458/week @ 2020-02-23 402/week @ 2020-03-01 755/week @ 2020-03-08 670/week @ 2020-03-15 712/week @ 2020-03-22 768/week @ 2020-03-29 745/week @ 2020-04-05 1479/week @ 2020-04-12 853/week @ 2020-04-19 443/week @ 2020-04-26 323/week @ 2020-05-03 435/week @ 2020-05-10 587/week @ 2020-05-17 471/week @ 2020-05-24

2,589 downloads per month
Used in less than 12 crates

MIT/Apache

150KB
2.5K SLoC

Fake

Build Status Latest Version

A Rust library for generating fake data.

Installation

Default:

[dependencies]
fake = "2.2"

If you want to use #[derive(Dummy)]:

fake = { version = "2.2", features=['derive']}

If you want the date and time features from chrono:

fake = { version = "2.2", features=['chrono']}

If you want http faker features:

fake = { version = "2.2", features=['http']}

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,
}

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

    // 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(fmt: &'static str);

Boolean

Boolean(ratio: u8);

Internet

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

HTTP

RfcStatusCode();
ValidStatusCode();

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();

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();

LICENSE

This project is licensed under either of

at your option.

Dependencies

~0.3–0.8MB
~12K SLoC