diff options
author | metamuffin <metamuffin@disroot.org> | 2023-07-31 16:52:20 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-07-31 16:52:20 +0200 |
commit | e6e424833315a6c0d04c7706d539f57e1b1df0f7 (patch) | |
tree | 220f322151bc0c7e147e4ac08102d859d599c919 /common/src | |
parent | bd9f74188a8d0e5a84c13850c3834189d5969d70 (diff) | |
download | jellything-e6e424833315a6c0d04c7706d539f57e1b1df0f7.tar jellything-e6e424833315a6c0d04c7706d539f57e1b1df0f7.tar.bz2 jellything-e6e424833315a6c0d04c7706d539f57e1b1df0f7.tar.zst |
new schema
Diffstat (limited to 'common/src')
-rw-r--r-- | common/src/lib.rs | 99 |
1 files changed, 39 insertions, 60 deletions
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<String>, - #[serde(default)] - pub description: Option<String>, - #[serde(default)] - pub poster: Option<PathBuf>, - #[serde(default)] - pub backdrop: Option<PathBuf>, - #[serde(default)] - pub index: Option<usize>, +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<PathBuf>, + #[serde(default)] pub backdrop: Option<PathBuf>, + #[serde(default)] pub source: Option<MediaSource>, } +#[rustfmt::skip] #[derive(Debug, Clone, Deserialize, Serialize)] -pub struct ItemInfo { - #[serde(flatten)] - pub common: CommmonInfo, - pub duration: f64, // in seconds - pub tracks: BTreeMap<usize, SourceTrack>, +pub struct ItemPublic { + pub kind: ItemKind, + pub title: String, + #[serde(default)] pub tagline: Option<String>, + #[serde(default)] pub description: Option<String>, + #[serde(default)] pub poster: Option<PathBuf>, + #[serde(default)] pub backdrop: Option<PathBuf>, + #[serde(default)] pub index: Option<usize>, + #[serde(default)] pub media: Option<MediaInfo>, } #[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<LocalTrack> }, + 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<Vec<u8>>, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct MediaInfo { + pub duration: f64, // in seconds + pub tracks: Vec<SourceTrack>, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct SourceTrack { pub kind: SourceTrackKind, pub name: String, pub codec: String, pub language: String, pub default_duration: Option<u64>, - pub codec_private: Option<Vec<u8>>, } #[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 - } -} |