pub mod api; pub mod r#impl; use bincode::{Decode, Encode}; use serde::{Deserialize, Serialize}; use std::{collections::BTreeMap, path::PathBuf, ops::Deref}; #[derive(Debug, Clone, Deserialize, Serialize)] pub struct CommmonInfo { pub title: String, #[serde(default)] pub tagline: Option, #[serde(default)] pub description: Option, #[serde(default)] pub poster: Option, #[serde(default)] pub backdrop: Option, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct DirectoryInfo { #[serde(flatten)] pub commmon: CommmonInfo, #[serde(default)] pub kind: DirectoryKind, } #[derive(Debug, Clone, Deserialize, Serialize)] #[serde(rename_all = "snake_case")] pub enum DirectoryKind { Folder, Series, Show, Season, } impl Default for DirectoryKind { fn default() -> Self { Self::Folder } } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct ItemInfo { #[serde(flatten)] pub commmon: CommmonInfo, pub duration: f64, // in seconds pub tracks: BTreeMap, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct SourceTrack { pub path: PathBuf, pub track_number: u64, pub kind: SourceTrackKind, pub name: String, pub codec: String, pub language: String, pub default_duration: Option, pub codec_private: Option>, } #[derive(Debug, Clone, Deserialize, Serialize)] #[serde(rename_all = "snake_case")] pub enum SourceTrackKind { Video { width: u64, height: u64, fps: f64, }, Audio { channels: usize, sample_rate: f64, bit_depth: usize, }, Subtitles, } #[derive(Debug, Clone, Decode, Encode)] pub struct SeekIndex { pub blocks: Vec, } #[derive(Debug, Clone, Decode, Encode)] pub struct BlockIndex { pub pts: u64, pub source_off: usize, pub size: usize, } impl Deref for ItemInfo { type Target = CommmonInfo; fn deref(&self) -> &Self::Target { &self.commmon } } impl Deref for DirectoryInfo { type Target = CommmonInfo; fn deref(&self) -> &Self::Target { &self.commmon } }