avatarr-parser 0.1.0

Release-name parser ported from Sonarr v4.0.17.2952
Documentation
// Ported from Sonarr v4.0.17.2952 (97e85a90):
//   src/NzbDrone.Core/Parser/Parser.cs

mod parser;
pub(crate) mod regexes;

pub use parser::parse_title;

/// Result of parsing a release title for episode information.
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ParsedEpisodeInfo {
    pub series_title: String,
    pub season_number: i32,
    pub episode_numbers: Vec<i32>,
    pub full_season: bool,
    pub is_partial_season: bool,
    pub is_multi_season: bool,
    pub season_part: i32,
    pub is_season_extra: bool,
    pub is_split_episode: bool,
    pub special: bool,
    /// Daily episode air-year (Sonarr-faithful: 0 means "not a daily"). m53.
    pub air_year: i32,
    /// Daily episode air-month (1-12, 0 if not a daily). m53.
    pub air_month: i32,
    /// Daily episode air-day (1-31, 0 if not a daily). m53.
    pub air_day: i32,
    /// Absolute (anime) episode numbers. m53.
    pub absolute_episode_numbers: Vec<i32>,
    /// Release-hash token (e.g. trailing `[6B7FD717]` on anime). m53.
    pub release_hash: Option<String>,
    /// Release group (e.g. `LOL`, `NTb-Eng`); populated by parse_title from release_group module. m53.
    pub release_group: Option<String>,
    /// Daily episode part number (e.g. Part 1 of a multi-part daily). m53.
    pub daily_part: Option<i32>,
    /// Release version (1 = original, 2+ = v2/v3 revisions). m55.
    pub version: i32,
}

impl Default for ParsedEpisodeInfo {
    fn default() -> Self {
        Self {
            series_title: String::new(),
            season_number: 0,
            episode_numbers: Vec::new(),
            full_season: false,
            is_partial_season: false,
            is_multi_season: false,
            season_part: 0,
            is_season_extra: false,
            is_split_episode: false,
            special: false,
            air_year: 0,
            air_month: 0,
            air_day: 0,
            absolute_episode_numbers: Vec::new(),
            release_hash: None,
            release_group: None,
            daily_part: None,
            version: 1,
        }
    }
}