Skip to main content

rs_plugin_common_interfaces/domain/
mod.rs

1use serde::{Deserialize, Serialize};
2
3use crate::domain::{media::{FileEpisode, MediaItemReference}, person::Person, serie::Serie, tag::Tag};
4
5pub mod backup;
6pub mod book;
7pub mod element_type;
8pub mod episode;
9pub mod external_images;
10pub mod media;
11pub mod movie;
12pub mod other_ids;
13pub mod person;
14pub mod rs_ids;
15pub mod serie;
16pub mod tag;
17pub mod tools;
18
19#[cfg(feature = "rusqlite")]
20pub mod rusqlite;
21
22#[derive(Debug, Serialize, Deserialize, Clone)]
23#[serde(rename_all = "camelCase")]
24pub enum MediaElement {
25    Media(media::Media),
26    Movie(movie::Movie),
27    Episode(episode::Episode),
28    Serie(serie::Serie),
29    Book(book::Book),
30}
31
32#[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq)]
33#[serde(rename_all = "camelCase")]
34pub struct ItemWithRelations<T> {
35    #[serde(flatten)]
36    pub item: T,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub relations: Option<Relations>,
39}
40
41
42
43#[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq)]
44#[serde(rename_all = "camelCase")]
45pub struct Relations {
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub people_details: Option<Vec<Person>>,
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub tags_details: Option<Vec<Tag>>,
50
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub people: Option<Vec<MediaItemReference>>,
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub tags: Option<Vec<MediaItemReference>>,
55    
56    #[serde(skip_serializing_if = "Option::is_none")]
57    pub series: Option<Vec<FileEpisode>>,
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub series_details: Option<Vec<Serie>>,
60
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub ext_images: Option<Vec<crate::domain::external_images::ExternalImage>>,
63}