impl<'a> ::arbitrary::Arbitrary<'a> for crate::audio::Loudness {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
fn finite(u: &mut ::arbitrary::Unstructured<'_>) -> ::arbitrary::Result<f32> {
Ok(u.int_in_range(-10_000_000i32..=10_000_000)? as f32 / 100.0)
}
Ok(Self::new(finite(u)?, finite(u)?, finite(u)?, finite(u)?))
}
}
impl<'a> ::arbitrary::Arbitrary<'a> for crate::audio::Fingerprint {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
let algo_s = <::std::string::String as ::arbitrary::Arbitrary>::arbitrary(u)?;
let algo: ::smol_str::SmolStr = if algo_s.is_empty() {
::smol_str::SmolStr::new_inline("x")
} else {
algo_s.into()
};
let value = ::bytes::Bytes::from(<::std::vec::Vec<u8> as ::arbitrary::Arbitrary>::arbitrary(
u,
)?);
Ok(crate::audio::Fingerprint::try_new(algo, value).expect("algo non-empty by construction"))
}
}
impl<'a> ::arbitrary::Arbitrary<'a> for crate::audio::CoverArt {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
let mime_s = <::std::string::String as ::arbitrary::Arbitrary>::arbitrary(u)?;
let mime: ::smol_str::SmolStr = if mime_s.is_empty() {
::smol_str::SmolStr::new_static("application/octet-stream")
} else {
mime_s.into()
};
let data_v = <::std::vec::Vec<u8> as ::arbitrary::Arbitrary>::arbitrary(u)?;
let data = ::bytes::Bytes::from(if data_v.is_empty() {
::std::vec![0u8]
} else {
data_v
});
Ok(crate::audio::CoverArt::try_new(mime, data).expect("mime + data non-empty by construction"))
}
}
impl<'a> ::arbitrary::Arbitrary<'a> for crate::audio::Tags {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
let t = crate::audio::Tags::new()
.with_title(::smol_str::SmolStr::from(
<::std::string::String as ::arbitrary::Arbitrary>::arbitrary(u)?,
))
.with_artist(::smol_str::SmolStr::from(
<::std::string::String as ::arbitrary::Arbitrary>::arbitrary(u)?,
))
.with_album_artist(::smol_str::SmolStr::from(
<::std::string::String as ::arbitrary::Arbitrary>::arbitrary(u)?,
))
.with_album(::smol_str::SmolStr::from(
<::std::string::String as ::arbitrary::Arbitrary>::arbitrary(u)?,
))
.with_composer(::smol_str::SmolStr::from(
<::std::string::String as ::arbitrary::Arbitrary>::arbitrary(u)?,
))
.with_genre(::smol_str::SmolStr::from(
<::std::string::String as ::arbitrary::Arbitrary>::arbitrary(u)?,
))
.with_comment(::smol_str::SmolStr::from(
<::std::string::String as ::arbitrary::Arbitrary>::arbitrary(u)?,
))
.with_year(<u16 as ::arbitrary::Arbitrary>::arbitrary(u)?)
.with_track_number(<u16 as ::arbitrary::Arbitrary>::arbitrary(u)?)
.with_track_total(<u16 as ::arbitrary::Arbitrary>::arbitrary(u)?)
.with_disc_number(<u16 as ::arbitrary::Arbitrary>::arbitrary(u)?)
.with_disc_total(<u16 as ::arbitrary::Arbitrary>::arbitrary(u)?)
.maybe_language(if <bool as ::arbitrary::Arbitrary>::arbitrary(u)? {
Some(<crate::lang::Language as ::arbitrary::Arbitrary>::arbitrary(u)?)
} else {
None
});
Ok(t)
}
}
impl<'a> ::arbitrary::Arbitrary<'a> for crate::capture::Device {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
let d = crate::capture::Device::new()
.with_make(::smol_str::SmolStr::from(
<::std::string::String as ::arbitrary::Arbitrary>::arbitrary(u)?,
))
.with_model(::smol_str::SmolStr::from(
<::std::string::String as ::arbitrary::Arbitrary>::arbitrary(u)?,
));
Ok(d)
}
}
impl<'a> ::arbitrary::Arbitrary<'a> for crate::capture::GeoLocation {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
let lat = u.int_in_range(-9_000i32..=9_000)? as f64 / 100.0;
let lon = u.int_in_range(-18_000i32..=18_000)? as f64 / 100.0;
let altitude = if <bool as ::arbitrary::Arbitrary>::arbitrary(u)? {
Some(u.int_in_range(-1_000i32..=100_000)? as f32)
} else {
None
};
Ok(
crate::capture::GeoLocation::try_new(lat, lon, altitude)
.expect("lat/lon in-range and altitude finite by construction"),
)
}
}
impl<'a> ::arbitrary::Arbitrary<'a> for crate::lang::Language {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
const TAGS: &[&str] = &[
"und",
"en",
"en-US",
"es",
"fr",
"de",
"ja",
"zh-Hant-TW",
"pt-BR",
"ar",
"ru",
"ko",
];
let tag: &&str = u.choose(TAGS)?;
Ok(crate::lang::Language::from_bcp47(tag).expect("curated BCP-47 tag must parse"))
}
}