Skip to main content

fake/impls/semver/
mod.rs

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}