diff --git a/crates/arr-core/src/lib.rs b/crates/arr-core/src/lib.rs index 7ec9229..be1badf 100644 --- a/crates/arr-core/src/lib.rs +++ b/crates/arr-core/src/lib.rs @@ -1,4 +1,6 @@ //! Pure domain types shared by the arr crates. +//! +//! This crate must never depend on `axum`, `sqlx` or `reqwest`. use std::{collections::BTreeMap, path::PathBuf, time::SystemTime}; @@ -60,13 +62,27 @@ pub enum Source { Other, } +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub struct DolbyVisionProfile { + pub profile: u8, + pub compatibility_id: Option, +} + #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub enum HdrFormat { Sdr, Hdr10, Hdr10Plus, Hlg, - DolbyVision { profile: u8 }, + DolbyVision(DolbyVisionProfile), +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum HdrClaim { + Hdr10, + Hdr10Plus, + Hlg, + DolbyVision, } #[derive(Clone, Debug, Eq, PartialEq)] @@ -77,7 +93,7 @@ pub enum RequiredAudio { #[derive(Clone, Debug, Eq, PartialEq)] pub struct HdrRules { - pub rejected_dolby_vision_profiles: Vec, + pub rejected_dolby_vision_profiles: Vec, } #[derive(Clone, Copy, Debug, Eq, PartialEq)] @@ -152,7 +168,7 @@ pub struct ProbedMedia { pub enum Rule { RequiredAudio, DubBlacklist(Language), - DolbyVisionProfile(u8), + DolbyVisionProfile(DolbyVisionProfile), Resolution(Resolution), Source(Source), Size, @@ -180,7 +196,7 @@ pub struct MediaFile { pub struct ParsedRelease { pub resolution: Option, pub source: Option, - pub hdr: Vec, + pub hdr: Vec, pub audio_languages: Vec, } @@ -241,7 +257,7 @@ pub struct MovieOwner { #[cfg(test)] mod tests { - use super::{HdrFormat, Language, Rule, Verdict}; + use super::{DolbyVisionProfile, HdrFormat, Language, Rule, Verdict}; #[test] fn portuguese_variants_are_distinct() { @@ -252,14 +268,23 @@ mod tests { #[test] fn dolby_vision_profile_is_preserved() { assert_ne!( - HdrFormat::DolbyVision { profile: 5 }, - HdrFormat::DolbyVision { profile: 8 } + HdrFormat::DolbyVision(DolbyVisionProfile { + profile: 8, + compatibility_id: Some(1), + }), + HdrFormat::DolbyVision(DolbyVisionProfile { + profile: 8, + compatibility_id: Some(2), + }) ); } #[test] fn non_eligible_verdicts_name_the_rule() { - let rule = Rule::DolbyVisionProfile(5); + let rule = Rule::DolbyVisionProfile(DolbyVisionProfile { + profile: 5, + compatibility_id: None, + }); assert_eq!(Verdict::Rejected(rule.clone()), Verdict::Rejected(rule)); } }