A Rust library for generating realistic random data of any kind.
Checkout the random-json crate to use this data as a CLI. It let's you choose the data you want with a dropdown dialogue in the terminal, or lets you generate big amounts of data in one go from a JSON schema!
cargo add random-datause random_data::{DataType, DataGenerator};
let mut generator = DataGenerator::default();
// Generate a random address
let address = DataType::Address.random(&mut generator);
println!("Address: {address}");
// Generate a random name
let name = DataType::FirstName.random(&mut generator);
println!("Name: {name}");
// Generate a random email
let email = DataType::Email.random(&mut generator);
println!("Email: {email}");
// Generate location data
let country = DataType::Country.random(&mut generator);
let coordinates = DataType::LatitudeLongitude.random(&mut generator);
println!("Location: {country} at {coordinates}");
// Generate technical data
let ip = DataType::Ipv4.random(&mut generator);
let mac = DataType::MacAddress.random(&mut generator);
println!("Network: IP {ip} MAC {mac}");
// List all the possible data types
let list = DataType::list_str();
println!("Possible data types: {list:?}");Some data types have predefined lists of values. You can access these lists:
use random_data::{DataGenerator, DataType};
let mut generator = DataGenerator::default();
// Check if a data type has a predefined list
if let Some(values) = DataType::Month.values() {
println!("Available months: {:?}", values);
}
// Formula-based types return None
assert!(DataType::Address.values().is_none());
// Generate and verify
let month = DataType::Month.random(&mut generator);
let all_months = DataType::Month.values().unwrap();
assert!(all_months.contains(&month.as_ref()));The library includes region-specific generators:
use random_data::{DataGenerator, DataType};
let mut generator = DataGenerator::default();
// UK-specific data
let uk_address = DataType::UkAddress.random(&mut generator);
let uk_postcode = DataType::UkPostCode.random(&mut generator);
let uk_phone = DataType::UkPhoneNumber.random(&mut generator);
// French-specific data
let french_address = DataType::FrenchAddress.random(&mut generator);
let french_postcode = DataType::FrenchPostCode.random(&mut generator);
let french_phone = DataType::FrenchPhoneNumber.random(&mut generator);- Internet:
EmailDomain,HttpStatusCode,MimeType,OpenSourceApp,TopLevelDomain,UserAgent,Ipv4,Ipv6,MacAddress - Companies:
CarBrand,CompanyName,Job - Computer science:
FileExtension,ProgrammingLanguage,ProgrammingParadigm,EditorColourTheme,ItDomain,DirPath,FileName,FilePath,Semver,SemverStable,SemverUnstable - Famous people:
Painter,Writer,Composer,Mathematician,Physician,Biologist,ComputerScientist,Philosopher - Colours:
HexColour,HslaColour,HslColour,RgbaColour,RgbColour,ColourName - Geography:
Latitude,LatitudeLongitude,Longitude,FrenchRiver,Country,City,Continent,CountryCode,Street,River,UkRiver - Addresses:
Address,FrenchAddress,FrenchPostCode,UkAddress,UkPostCode,FrenchStreet,FrenchRoadType,FrenchCounty,UsStateAbbr,UsState,UsRoads,UsRoadTypes,UkCountyCode,UkPostcodeArea,UkCounty,UkCity,UkRoadType,UkStreet,StreetNumber - Science:
ChemicalElement,MathematicalFunction - Names:
FirstName,FrenchFirstName,FrenchLastName,LastName,NameTitle - Arts:
LiteraryGenre,ArchitecturalStyle,MusicalGenre,MusicalInstrument - Time:
DaysOfWeek,Month,DaysOfWeekAbbr,MonthsAbbr,TimeZone,TimeUnit,AmPm - Animals:
Animal,Mammal,Bird,Insect,MythologicalCreature,Fish,Amphibian,Reptile,Mollusc,AnimalType - Education:
SchoolSubject,AcademicDiscipline,DegreesTitle,University,HistoricalBattle,Sport - Primitives:
AlphanumericCapitalChar,AlphanumericChar,Boolean,CapitalChar,Digit,LowerChar - Personal data:
CreditCard,Email,FrenchEmail,FrenchLicencePlate,FrenchPhoneNumber,NhsNumber,Password,PhoneNumber,SecuriteSociale,UkLicencePlate,UkPhoneNumber - ISBNs:
RandomIsbn10,RandomIsbn13 - Banks & finance:
Bic,Iban,Isin,CurrencyName,CurrencySymbol,CurrencyCode - Text:
Word,Sentence,Paragraph - Sky & space:
Constellation,Planet,Star,Galaxy,CloudType
Tip
If you don't want all the data to be loaded in your binary, you can use the feature flags to disable those you don't want.
Most of the data used in this crate was generated by ChatGPT (and thus licensed under CC0).