1use crate::faker::boolean::raw::Boolean;
2use crate::locales::EN;
3use crate::{Dummy, Fake, Faker};
4use rand::seq::IndexedRandom;
5use rand::RngExt;
6
7const UNSTABLE_SEMVER: &[&str] = &["alpha", "beta", "rc"];
8
9impl Dummy<Faker> for semver::Version {
10 fn dummy_with_rng<R: RngExt + ?Sized>(_: &Faker, rng: &mut R) -> Self {
11 let probability = 10;
12 let pre = if Boolean(EN, probability).fake_with_rng(rng) {
13 semver::Prerelease::new(&format!(
14 "{}.{}",
15 *UNSTABLE_SEMVER.choose(rng).unwrap(),
16 &(0..9).fake_with_rng::<u8, _>(rng).to_string()
17 ))
18 .unwrap()
19 } else {
20 semver::Prerelease::EMPTY
21 };
22 semver::Version {
23 major: (0..9).fake_with_rng::<u64, _>(rng),
24 minor: (0..20).fake_with_rng::<u64, _>(rng),
25 patch: (0..20).fake_with_rng::<u64, _>(rng),
26 pre,
27 build: semver::BuildMetadata::EMPTY,
28 }
29 }
30}