From e6e424833315a6c0d04c7706d539f57e1b1df0f7 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Mon, 31 Jul 2023 16:52:20 +0200 Subject: new schema --- common/src/lib.rs | 99 ++++++++++++++++++++++--------------------------------- 1 file changed, 39 insertions(+), 60 deletions(-) (limited to 'common/src') diff --git a/common/src/lib.rs b/common/src/lib.rs index fd69d8f..bab1d79 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -1,69 +1,71 @@ -pub mod api; pub mod r#impl; use bincode::{Decode, Encode}; use serde::{Deserialize, Serialize}; -use std::{ - collections::BTreeMap, - ops::{Deref, DerefMut}, - path::PathBuf, -}; +use std::path::PathBuf; #[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, - #[serde(default)] - pub index: Option, +pub struct Item { + pub public: ItemPublic, + pub private: ItemPrivate, } +#[rustfmt::skip] #[derive(Debug, Clone, Deserialize, Serialize)] -pub struct DirectoryInfo { - #[serde(flatten)] - pub common: CommmonInfo, - #[serde(default)] - pub kind: DirectoryKind, +pub struct ItemPrivate { + #[serde(default)] pub poster: Option, + #[serde(default)] pub backdrop: Option, + #[serde(default)] pub source: Option, } +#[rustfmt::skip] #[derive(Debug, Clone, Deserialize, Serialize)] -pub struct ItemInfo { - #[serde(flatten)] - pub common: CommmonInfo, - pub duration: f64, // in seconds - pub tracks: BTreeMap, +pub struct ItemPublic { + pub kind: ItemKind, + pub title: String, + #[serde(default)] pub tagline: Option, + #[serde(default)] pub description: Option, + #[serde(default)] pub poster: Option, + #[serde(default)] pub backdrop: Option, + #[serde(default)] pub index: Option, + #[serde(default)] pub media: Option, } #[derive(Debug, Clone, Deserialize, Serialize)] #[serde(rename_all = "snake_case")] -pub enum DirectoryKind { - Folder, +pub enum ItemKind { + Collection, Series, Show, Season, } -impl Default for DirectoryKind { - fn default() -> Self { - Self::Folder - } + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub enum MediaSource { + Local { tracks: Vec }, + Remote { host: String, remote_id: String }, } #[derive(Debug, Clone, Deserialize, Serialize)] -pub struct SourceTrack { +pub struct LocalTrack { pub path: PathBuf, - pub track_number: u64, + pub track: usize, + pub codec_private: Option>, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct MediaInfo { + pub duration: f64, // in seconds + pub tracks: Vec, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct SourceTrack { 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)] @@ -93,26 +95,3 @@ pub struct BlockIndex { pub source_off: usize, pub size: usize, } - -impl Deref for ItemInfo { - type Target = CommmonInfo; - fn deref(&self) -> &Self::Target { - &self.common - } -} -impl Deref for DirectoryInfo { - type Target = CommmonInfo; - fn deref(&self) -> &Self::Target { - &self.common - } -} -impl DerefMut for ItemInfo { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.common - } -} -impl DerefMut for DirectoryInfo { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.common - } -} -- cgit v1.2.3-70-g09d2