{"id":13502954,"url":"https://github.com/cksac/fake-rs","last_synced_at":"2025-03-29T13:30:25.269Z","repository":{"id":38451732,"uuid":"62238977","full_name":"cksac/fake-rs","owner":"cksac","description":"A library for generating fake data in Rust.","archived":false,"fork":false,"pushed_at":"2025-03-21T07:06:46.000Z","size":719,"stargazers_count":1076,"open_issues_count":16,"forks_count":105,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-03-21T07:08:49.754Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cksac.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"cksac","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2016-06-29T15:56:36.000Z","updated_at":"2025-03-21T07:06:51.000Z","dependencies_parsed_at":"2023-11-14T01:29:47.324Z","dependency_job_id":"a823345e-2233-4754-9faf-e66fb26a0520","html_url":"https://github.com/cksac/fake-rs","commit_stats":{"total_commits":223,"total_committers":35,"mean_commits":6.371428571428571,"dds":0.5426008968609866,"last_synced_commit":"1c26a3997ba28a8422c1da8b19e6f77952ffcc4b"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cksac%2Ffake-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cksac%2Ffake-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cksac%2Ffake-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cksac%2Ffake-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cksac","download_url":"https://codeload.github.com/cksac/fake-rs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246190134,"owners_count":20737978,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T22:02:31.643Z","updated_at":"2025-03-29T13:30:25.256Z","avatar_url":"https://github.com/cksac.png","language":"Rust","funding_links":["https://github.com/sponsors/cksac"],"categories":["Rust","Languages","Development tools","开发工具 Development tools","Testing"],"sub_categories":["Testing","测试 Testing","fake data"],"readme":"# Fake\n\n![Rust](https://github.com/cksac/fake-rs/workflows/Rust/badge.svg)\n[![Docs Status](https://docs.rs/fake/badge.svg)](https://docs.rs/fake)\n[![Latest Version](https://img.shields.io/crates/v/fake.svg)](https://crates.io/crates/fake)\n\nA Rust library and command line tool for generating fake data in different languages. Currently supports:\n\n| Language              | Code  |\n|-----------------------|-------|\n| English               | en    |\n| French                | fr_fr |\n| Arabic                | ar_sa |\n| Traditional Chinese   | zh_tw |\n| Simplified Chinese    | zh_cn |\n| Japanese              | ja_jp |\n| Portugese (Brazilian) | pt_br |\n| Portugese (Portugal)  | pt_pt |\n| German                | de_de |\n| Italian               | it_it |\n\n\n## Installation\n\n### Library:\n\n```toml\n[dependencies]\nfake = { version = \"4\", features = [\"derive\"] }\n```\n\nAvailable library features:\n\n- `derive`: if you want to use `#[derive(Dummy)]`\n- supported crates feature flags:\n  - `chrono`\n  - `chrono-tz`\n  - `http`\n  - `ulid`\n  - `uuid`\n  - `bigdecimal` (via `bigdecimal-rs`)\n  - `rust_decimal`\n  - `random_color`\n  - `geo`\n  - `semver`\n  - `serde_json`\n  - `time`\n  - `zerocopy`\n  - `glam`\n  - `url`\n  - `indexmap`\n- `always-true-rng`: expose AlwaysTrueRng\n- `maybe-non-empty-collections`: allow to use AlwaysTrueRng to generate non-empty collections\n\n### CLI:\n`cargo install --features=cli --git https://github.com/cksac/fake-rs.git`\n\nAccess cli using `fake` command. Below are the currently available fake generators.\n\n```shell\n❯ fake\nAn easy to use library and command line for generating fake data like name, number, address, lorem, dates, etc.\n\nUsage: fake [OPTIONS] [COMMAND]\n\nCommands:\n  CityPrefix            \n  CitySuffix            \n  CityName              \n  CountryName           \n  CountryCode           \n  StreetSuffix          \n  StreetName            \n  TimeZone              \n  StateName             \n  StateAbbr             \n  SecondaryAddressType  \n  SecondaryAddress      \n  ZipCode               \n  PostCode              \n  BuildingNumber        \n  Latitude              \n  Longitude             \n  Geohash               \n  Isbn                  \n  Isbn10                \n  Isbn13                \n  CreditCardNumber      \n  CompanySuffix         \n  CompanyName           \n  Buzzword              \n  BuzzwordMiddle        \n  BuzzwordTail          \n  CatchPhrase           \n  BsVerb                \n  BsAdj                 \n  BsNoun                \n  Bs                    \n  Profession            \n  Industry              \n  FreeEmailProvider     \n  DomainSuffix          \n  FreeEmail             \n  SafeEmail             \n  Username              \n  Password              \n  IPv4                  \n  IPv6                  \n  IP                    \n  MACAddress            \n  UserAgent             \n  Seniority             \n  Field                 \n  Position              \n  Word                  \n  Words                 \n  Sentence              \n  Sentences             \n  Paragraph             \n  Paragraphs            \n  FirstName             \n  LastName              \n  Title                 \n  Suffix                \n  Name                  \n  NameWithTitle         \n  PhoneNumber           \n  CellNumber            \n  FilePath              \n  FileName              \n  FileExtension         \n  DirPath               \n  MimeType              \n  Semver                \n  SemverStable          \n  SemverUnstable        \n  CurrencyCode          \n  CurrencyName          \n  CurrencySymbol        \n  Bic                   \n  Isin                  \n  HexColor              \n  RgbColor              \n  RgbaColor             \n  HslColor              \n  HslaColor             \n  Color                 \n  Time                  \n  Date                  \n  DateTime              \n  RfcStatusCode         \n  ValidStatusCode       \n  help                  Print this message or the help of the given subcommand(s)\n\nOptions:\n  -r, --repeat \u003crepeat\u003e  [default: 1]\n  -l, --locale \u003clocale\u003e  [default: EN]\n  -h, --help             Print help\n  -V, --version          Print version\n\n```\n\n## Usage\n\n### In rust code\n```rust\nuse fake::{Dummy, Fake, Faker};\nuse rand::rngs::StdRng;\nuse rand::SeedableRng;\n\n#[derive(Debug, Dummy)]\npub struct Foo {\n    #[dummy(faker = \"1000..2000\")]\n    order_id: usize,\n    customer: String,\n    paid: bool,\n}\n\n#[derive(Debug, Dummy)]\nstruct Bar\u003cT\u003e {\n    field: Vec\u003cT\u003e,\n}\n\nfn main() {\n    // type derived Dummy\n    let f: Foo = Faker.fake();\n    println!(\"{:?}\", f);\n\n    let b: Bar\u003cFoo\u003e = Faker.fake();\n    println!(\"{:?}\", b);\n\n    // using `Faker` to generate default fake value of given type\n    let tuple = Faker.fake::\u003c(u8, u32, f32)\u003e();\n    println!(\"tuple {:?}\", tuple);\n    println!(\"String {:?}\", Faker.fake::\u003cString\u003e());\n\n    // types U can used to generate fake value T, if `T: Dummy\u003cU\u003e`\n    println!(\"String {:?}\", (8..20).fake::\u003cString\u003e());\n    println!(\"u32 {:?}\", (8..20).fake::\u003cu32\u003e());\n\n    // using `faker` module with locales\n    use fake::faker::name::raw::*;\n    use fake::locales::*;\n\n    let name: String = Name(EN).fake();\n    println!(\"name {:?}\", name);\n\n    let name: String = Name(ZH_TW).fake();\n    println!(\"name {:?}\", name);\n\n    // using convenient function without providing locale\n    use fake::faker::lorem::en::*;\n    let words: Vec\u003cString\u003e = Words(3..5).fake();\n    println!(\"words {:?}\", words);\n\n    // using macro to generate nested collection\n    let name_vec = fake::vec![String as Name(EN); 4, 3..5, 2];\n    println!(\"random nested vec {:?}\", name_vec);\n\n    // fixed seed rng\n    let seed = [\n        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,\n        0, 0, 0, 0,\n    ];\n    let ref mut r = StdRng::from_seed(seed);\n    for _ in 0..5 {\n        let v: usize = Faker.fake_with_rng(r);\n        println!(\"value from fixed seed {}\", v);\n    }\n}\n```\n\n## Command line\n\nGenerate random name (defaults to EN locale)\n```shell\n❯ ./fake Name\nGenerating 1 fakes for EN locale\nTheresa Walker\n```\nGenerate 5 chinese random names by mentioning locale to zh_cn\n```shell\n❯ ./fake -r5 -lzh_cn Name\nGenerating 5 fakes for ZH_CN locale\n何丹华\n尹雅瑾\n于金福\n郭雨珍\n龙菲霞\n```\nGenerate 5 random passwords with minimum 10 characters\n```shell\n❯ ./fake -r5 Password --min 10\nGenerating 5 fakes for EN locale\nQ6eeXHfC3uzSRqtZwB\n6fDHAOh3I7Ah77duLL\nR8ygoTLmd4i1z1Z\n5Uxj3RdEK5O4Af3ow\n2XWsGT0lUaDnMZTb7\n```\nArguments can be sent to fake generators like password that accept different ranges\n```shell\n❯ ./fake Password --help\nUsage: fake Password [OPTIONS]\n\nOptions:\n      --max \u003cmax\u003e  [default: 20]\n      --min \u003cmin\u003e  [default: 10]\n  -h, --help       Print help\n```\n\n# Fakers with locale\n\n## Lorem\n\n```rust\nWord();\nWords(count: Range\u003cusize\u003e);\nSentence(count: Range\u003cusize\u003e);\nSentences(count: Range\u003cusize\u003e);\nParagraph(count: Range\u003cusize\u003e);\nParagraphs(count: Range\u003cusize\u003e);\n```\n\n## Name\n\n```rust\nFirstName();\nLastName();\nTitle();\nSuffix();\nName();\nNameWithTitle();\n```\n\n## Number\n\n```rust\nDigit();\nNumberWithFormat\u003c'a\u003e(fmt: \u0026'a str);\n```\n\n## Boolean\n\n```rust\nBoolean(ratio: u8);\n```\n\n## Internet\n\n```rust\nFreeEmailProvider();\nDomainSuffix();\nFreeEmail();\nSafeEmail();\nUsername();\nPassword(len_range: Range\u003cusize\u003e);\nIPv4();\nIPv6();\nIP();\nMACAddress();\nUserAgent();\n```\n\n## HTTP\n\n```rust\nRfcStatusCode();\nValidStatusCode();\n```\n\n## Color\n\n```rust\nHexColor();\nRgbColor();\nRgbaColor();\nHslColor();\nHslaColor();\nColor();\n```\n\n## Company\n\n```rust\nCompanySuffix();\nCompanyName();\nBuzzword();\nBuzzwordMiddle();\nBuzzwordTail();\nCatchPhrase();\nBsVerb();\nBsAdj();\nBsNoun();\nBs();\nProfession();\nIndustry();\n```\n\n## Currency\n\n```rust\nCurrencyCode();\nCurrencyName();\nCurrencySymbol();\n```\n\n## Creditcard\n\n```rust\nCreditCardNumber();\n```\n\n## Address\n\n```rust\nCityPrefix();\nCitySuffix();\nCityName();\nCountryName();\nCountryCode();\nStreetSuffix();\nStreetName();\nTimeZone();\nStateName();\nStateAbbr();\nSecondaryAddressType();\nSecondaryAddress();\nZipCode();\nPostCode();\nBuildingNumber();\nLatitude();\nLongitude();\nGeohash(precision: u8);\n```\n\n## Administrative\n\n```rust\nHealthInsuranceCode();\n```\n\n## Automotive\n\n```rust\nLicencePlate();\n```\n\n## Barcode\n\n```rust\nIsbn();\nIsbn13();\nIsbn10();\n```\n\n## Phone Number\n\n```rust\nPhoneNumber();\nCellNumber();\n```\n\n## Date/Time\n\n```rust\nTime();\nDate();\nDateTime();\nDuration();\nDateTimeBefore(dt: DateTime\u003cUtc\u003e);\nDateTimeAfter(dt: DateTime\u003cUtc\u003e);\nDateTimeBetween(start: DateTime\u003cUtc\u003e, end: DateTime\u003cUtc\u003e);\n```\n\n## Filesystem\n\n```rust\nFilePath();\nFileName();\nFileExtension();\nDirPath();\n```\n\n### Finance\n\n```rust\nBic();\nIsin();\n```\n\n### UUID\n\n```rust\nUUIDv1();\nUUIDv3();\nUUIDv4();\nUUIDv5();\n```\n\n### Decimal\n\n```rust\nDecimal();\nPositiveDecimal();\nNegativeDecimal();\nNoDecimalPoints();\n```\n\n### Bigdecimal\n\n```rust\nBigDecimal();\nPositiveBigDecimal();\nNegativeBigDecimal();\nNoBigDecimalPoints();\n```\n\n## Utils\n### Either\n```rust\nuse fake::faker::phone_number::en::{CellNumber, PhoneNumber};\nuse fake::{utils::{either, WrappedVal}, Dummy, Fake, Faker};\n\n#[derive(Debug, Dummy)]\nstruct Foo {\n    #[dummy(faker = \"either(PhoneNumber(), CellNumber())\", wrapper = \"WrappedVal\")]\n    phone_number: String,\n}\n```\n\n# LICENSE\n\nThis project is licensed under either of\n\n- Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or\n  http://www.apache.org/licenses/LICENSE-2.0)\n- MIT license ([LICENSE-MIT](LICENSE-MIT) or\n  http://opensource.org/licenses/MIT)\n\nat your option.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcksac%2Ffake-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcksac%2Ffake-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcksac%2Ffake-rs/lists"}