#fake-data #random #generator #faker #data

fake

一个易于使用的库,用于生成类似于姓名、数字、地址、Lorem、日期等的伪造数据

25 个稳定版本

2.9.2 2023 年 12 月 20 日
2.9.1 2023 年 10 月 25 日
2.8.0 2023 年 8 月 21 日
2.6.1 2023 年 5 月 6 日
0.4.0 2016 年 7 月 18 日

#8 in 开发工具

Download history 47613/week @ 2024-04-24 47540/week @ 2024-05-01 49859/week @ 2024-05-08 46898/week @ 2024-05-15 43756/week @ 2024-05-22 44167/week @ 2024-05-29 45075/week @ 2024-06-05 46826/week @ 2024-06-12 47026/week @ 2024-06-19 46405/week @ 2024-06-26 40912/week @ 2024-07-03 47508/week @ 2024-07-10 49040/week @ 2024-07-17 54376/week @ 2024-07-24 52683/week @ 2024-07-31 54020/week @ 2024-08-07

219,194 每月下载量
用于 154 个包 (141 个直接使用)

MIT/Apache 许可证

345KB
8K SLoC

Fake

Build Status Latest Version

Rust 库,用于生成伪造数据。

安装

默认

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

可用功能

  • derive:如果您想使用 #[derive(Dummy)]
  • 支持的包功能标志
    • chrono
    • chrono-tz
    • http
    • uuid
    • bigdecimal (通过 bigdecimal-rs)
    • rust_decimal
    • random_color
    • geo
    • semver
    • serde_json
    • time
    • zerocopy
    • glam
  • always-true-rng:暴露 AlwaysTrueRng
  • maybe-non-empty-collections:允许使用 AlwaysTrueRng 生成非空集合

使用方法

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

具有区域设置的伪造者

Lorem

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

姓名

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

数字

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

布尔值

Boolean(ratio: u8);

互联网

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

HTTP

RfcStatusCode();
ValidStatusCode();

颜色

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

公司

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

地址

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

汽车

LicencePlate();

条形码

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

电话号码

PhoneNumber();
CellNumber();

日期/时间

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

文件系统

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

金融

Bic();

UUID

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

许可证

此项目受以下许可证之一许可:

您可选择。

依赖项

~0.4–3MB
~58K SLoC