Skip to main content

rs_plugin_common_interfaces/lookup/
mod.rs

1use std::collections::HashMap;
2
3use crate::domain::book::Book;
4use crate::domain::episode::Episode;
5use crate::domain::media::Media;
6use crate::domain::movie::Movie;
7use crate::domain::person::Person;
8use crate::domain::serie::Serie;
9use crate::PluginCredential;
10use crate::{domain::rs_ids::RsIds, request::RsRequest};
11use serde::{Deserialize, Serialize};
12use strum_macros::EnumString;
13
14#[derive(
15    Debug, Serialize, Deserialize, Clone, PartialEq, strum_macros::Display, EnumString, Default,
16)]
17#[serde(rename_all = "camelCase")]
18#[strum(serialize_all = "camelCase")]
19pub enum RsLookupSourceResult {
20    Requests(Vec<RsRequest>),
21    NotFound,
22    #[default]
23    NotApplicable,
24}
25
26#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
27#[serde(rename_all = "camelCase")]
28pub struct RsLookupPerson {
29    pub name: Option<String>,
30    pub ids: Option<RsIds>,
31}
32
33#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
34#[serde(rename_all = "camelCase")]
35pub struct RsLookupSerie {
36    pub name: Option<String>,
37    pub ids: Option<RsIds>,
38}
39
40#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
41#[serde(rename_all = "camelCase")]
42pub struct RsLookupSerieSeason {
43    pub name: Option<String>,
44    pub ids: Option<RsIds>,
45}
46
47#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
48#[serde(rename_all = "camelCase")]
49pub struct RsLookupEpisode {
50    pub name: Option<String>,
51    pub ids: Option<RsIds>,
52
53    pub season: u32,
54    pub number: Option<u32>,
55}
56
57#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
58#[serde(rename_all = "camelCase")]
59pub struct RsLookupBook {
60    pub name: Option<String>,
61    pub ids: Option<RsIds>,
62}
63#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
64#[serde(rename_all = "camelCase")]
65pub struct RsLookupSong {
66    pub title: Option<String>,
67    pub author: Option<String>,
68    pub album: Option<String>,
69    pub ids: Option<RsIds>,
70}
71
72#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
73#[serde(rename_all = "camelCase")]
74pub struct RsLookupMedia {
75    pub search: Option<String>,
76    pub ids: Option<RsIds>,
77}
78
79#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
80#[serde(rename_all = "camelCase")]
81pub struct RsLookupMovie {
82    pub name: Option<String>,
83    pub ids: Option<RsIds>,
84}
85
86#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, strum_macros::Display, EnumString)]
87#[serde(rename_all = "camelCase")]
88#[strum(serialize_all = "camelCase")]
89pub enum RsLookupQuery {
90    Book(RsLookupBook),
91    Media(RsLookupMedia),
92    Episode(RsLookupEpisode),
93    Movie(RsLookupMovie),
94    Person(RsLookupPerson),
95    Serie(RsLookupSerie),
96    SerieSeason(RsLookupSerieSeason),
97    Song(RsLookupSong),
98}
99
100#[derive(
101    Debug, Serialize, Deserialize, Clone, PartialEq, strum_macros::Display, EnumString, Default,
102)]
103#[serde(rename_all = "camelCase")]
104#[strum(serialize_all = "camelCase")]
105pub enum RsLookupMetadataResult {
106    Book(Book),
107    Media(Media),
108    Episode(Episode),
109    Movie(Movie),
110    Person(Person),
111    Serie(Serie),
112    #[default]
113    None,
114}
115
116#[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq)]
117#[serde(rename_all = "camelCase")]
118pub struct RsLookupMetadataResultWithImages {
119    pub metadata: RsLookupMetadataResult,
120    pub images: Vec<crate::domain::external_images::ExternalImage>,
121    pub lookup_tags: Option<Vec<String>>,
122    pub lookup_people: Option<Vec<String>>,
123}
124
125#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
126#[serde(rename_all = "camelCase")]
127pub struct RsLookupWrapper {
128    pub query: RsLookupQuery,
129    pub credential: Option<PluginCredential>,
130    pub params: Option<HashMap<String, String>>,
131}