rs_plugin_common_interfaces/lookup/
mod.rs1use std::collections::HashMap;
2
3use crate::domain::Relations;
4use crate::domain::book::Book;
5use crate::domain::episode::Episode;
6use crate::domain::media::Media;
7use crate::domain::movie::Movie;
8use crate::domain::person::Person;
9use crate::domain::serie::Serie;
10use crate::{CustomParamTypes, PluginCredential};
11use crate::request::RsGroupDownload;
12use crate::domain::rs_ids::{ApplyRsIds, RsIds};
13use crate::request::RsRequest;
14use serde::{Deserialize, Serialize};
15use strum_macros::EnumString;
16
17#[derive(
18 Debug, Serialize, Deserialize, Clone, PartialEq, strum_macros::Display, EnumString, Default,
19)]
20#[serde(rename_all = "camelCase")]
21#[strum(serialize_all = "camelCase")]
22pub enum RsLookupSourceResult {
23 Requests(Vec<RsRequest>),
24 GroupRequest(Vec<RsGroupDownload>),
25 NotFound,
26 #[default]
27 NotApplicable,
28}
29
30#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
31#[serde(rename_all = "camelCase")]
32pub struct RsLookupPerson {
33 pub name: Option<String>,
34 pub ids: Option<RsIds>,
35
36 #[serde(skip_serializing_if = "Option::is_none")]
37 pub page_key: Option<String>
38
39
40}
41
42#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
43#[serde(rename_all = "camelCase")]
44pub struct RsLookupSerie {
45 pub name: Option<String>,
46 pub ids: Option<RsIds>,
47
48 #[serde(skip_serializing_if = "Option::is_none")]
49 pub page_key: Option<String>
50}
51
52#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
53#[serde(rename_all = "camelCase")]
54pub struct RsLookupSerieSeason {
55 pub name: Option<String>,
56 pub ids: Option<RsIds>,
57
58 #[serde(skip_serializing_if = "Option::is_none")]
59 pub page_key: Option<String>
60}
61
62#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
63#[serde(rename_all = "camelCase")]
64pub struct RsLookupEpisode {
65 pub name: Option<String>,
66 pub ids: Option<RsIds>,
67
68 pub season: u32,
69 pub number: Option<u32>,
70
71 #[serde(skip_serializing_if = "Option::is_none")]
72 pub page_key: Option<String>
73}
74
75#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
76#[serde(rename_all = "camelCase")]
77pub struct RsLookupBook {
78 pub name: Option<String>,
79 pub ids: Option<RsIds>,
80
81 #[serde(skip_serializing_if = "Option::is_none")]
82 pub page_key: Option<String>
83}
84#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
85#[serde(rename_all = "camelCase")]
86pub struct RsLookupSong {
87 pub title: Option<String>,
88 pub author: Option<String>,
89 pub album: Option<String>,
90 pub ids: Option<RsIds>,
91
92 #[serde(skip_serializing_if = "Option::is_none")]
93 pub page_key: Option<String>
94}
95
96#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
97#[serde(rename_all = "camelCase")]
98pub struct RsLookupMedia {
99 pub search: Option<String>,
100 pub ids: Option<RsIds>,
101
102 #[serde(skip_serializing_if = "Option::is_none")]
103 pub page_key: Option<String>
104}
105
106#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
107#[serde(rename_all = "camelCase")]
108pub struct RsLookupMovie {
109 pub name: Option<String>,
110 pub ids: Option<RsIds>,
111
112 #[serde(skip_serializing_if = "Option::is_none")]
113 pub page_key: Option<String>
114}
115
116#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, strum_macros::Display, EnumString)]
117#[serde(rename_all = "camelCase")]
118#[strum(serialize_all = "camelCase")]
119pub enum RsLookupQuery {
120 Book(RsLookupBook),
121 Media(RsLookupMedia),
122 Episode(RsLookupEpisode),
123 Movie(RsLookupMovie),
124 Person(RsLookupPerson),
125 Serie(RsLookupSerie),
126 SerieSeason(RsLookupSerieSeason),
127 Song(RsLookupSong),
128}
129
130#[derive(
131 Debug, Serialize, Deserialize, Clone, PartialEq, strum_macros::Display, EnumString,
132)]
133#[serde(rename_all = "camelCase")]
134#[strum(serialize_all = "camelCase")]
135pub enum RsLookupMatchType {
136 ExactId,
137 ExactText,
138}
139
140#[derive(
141 Debug, Serialize, Deserialize, Clone, PartialEq, strum_macros::Display, EnumString, Default,
142)]
143#[serde(rename_all = "camelCase")]
144#[strum(serialize_all = "camelCase")]
145pub enum RsLookupMetadataResult {
146 Book(Book),
147 Media(Media),
148 Episode(Episode),
149 Movie(Movie),
150 Person(Person),
151 Serie(Serie),
152 #[default]
153 None,
154}
155
156impl RsLookupMetadataResult {
157 pub fn extract_ids(&self) -> Option<RsIds> {
159 match self {
160 Self::Movie(m) => Some(RsIds::from(m.clone())),
161 Self::Serie(s) => Some(RsIds::from(s.clone())),
162 Self::Book(b) => Some(RsIds::from(b.clone())),
163 Self::Person(p) => Some(RsIds::from(p.clone())),
164 Self::Episode(e) => Some(RsIds::from(e.clone())),
165 Self::Media(_) | Self::None => None,
166 }
167 }
168
169 pub fn apply_ids(&mut self, ids: &RsIds) {
171 match self {
172 Self::Movie(m) => m.apply_rs_ids(ids),
173 Self::Serie(s) => s.apply_rs_ids(ids),
174 Self::Book(b) => b.apply_rs_ids(ids),
175 Self::Person(p) => p.apply_rs_ids(ids),
176 Self::Episode(e) => e.apply_rs_ids(ids),
177 Self::Media(_) | Self::None => {}
178 }
179 }
180}
181
182#[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq)]
183#[serde(rename_all = "camelCase")]
184pub struct RsLookupMetadataResults {
185 pub results: Vec<RsLookupMetadataResultWrapper>,
186
187 #[serde(skip_serializing_if = "Option::is_none")]
188 pub next_page_key: Option<String>,
189
190}
191
192#[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq)]
193#[serde(rename_all = "camelCase")]
194pub struct RsLookupMetadataResultWrapper {
195 pub metadata: RsLookupMetadataResult,
196
197 #[serde(skip_serializing_if = "Option::is_none")]
198 pub relations: Option<Relations>,
199
200 #[serde(skip_serializing_if = "Option::is_none")]
201 pub match_type: Option<RsLookupMatchType>,
202
203}
204
205#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
206#[serde(rename_all = "camelCase")]
207pub struct RsLookupWrapper {
208 pub query: RsLookupQuery,
209 pub credential: Option<PluginCredential>,
210 pub params: Option<HashMap<String, CustomParamTypes>>,
211}