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::RsIds, request::RsRequest};
13use serde::{Deserialize, Serialize};
14use strum_macros::EnumString;
15
16#[derive(
17 Debug, Serialize, Deserialize, Clone, PartialEq, strum_macros::Display, EnumString, Default,
18)]
19#[serde(rename_all = "camelCase")]
20#[strum(serialize_all = "camelCase")]
21pub enum RsLookupSourceResult {
22 Requests(Vec<RsRequest>),
23 GroupRequest(Vec<RsGroupDownload>),
24 NotFound,
25 #[default]
26 NotApplicable,
27}
28
29#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
30#[serde(rename_all = "camelCase")]
31pub struct RsLookupPerson {
32 pub name: Option<String>,
33 pub ids: Option<RsIds>,
34
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub page_key: Option<String>
37
38
39}
40
41#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
42#[serde(rename_all = "camelCase")]
43pub struct RsLookupSerie {
44 pub name: Option<String>,
45 pub ids: Option<RsIds>,
46
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub page_key: Option<String>
49}
50
51#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
52#[serde(rename_all = "camelCase")]
53pub struct RsLookupSerieSeason {
54 pub name: Option<String>,
55 pub ids: Option<RsIds>,
56
57 #[serde(skip_serializing_if = "Option::is_none")]
58 pub page_key: Option<String>
59}
60
61#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
62#[serde(rename_all = "camelCase")]
63pub struct RsLookupEpisode {
64 pub name: Option<String>,
65 pub ids: Option<RsIds>,
66
67 pub season: u32,
68 pub number: Option<u32>,
69
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub page_key: Option<String>
72}
73
74#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
75#[serde(rename_all = "camelCase")]
76pub struct RsLookupBook {
77 pub name: Option<String>,
78 pub ids: Option<RsIds>,
79
80 #[serde(skip_serializing_if = "Option::is_none")]
81 pub page_key: Option<String>
82}
83#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
84#[serde(rename_all = "camelCase")]
85pub struct RsLookupSong {
86 pub title: Option<String>,
87 pub author: Option<String>,
88 pub album: Option<String>,
89 pub ids: Option<RsIds>,
90
91 #[serde(skip_serializing_if = "Option::is_none")]
92 pub page_key: Option<String>
93}
94
95#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
96#[serde(rename_all = "camelCase")]
97pub struct RsLookupMedia {
98 pub search: Option<String>,
99 pub ids: Option<RsIds>,
100
101 #[serde(skip_serializing_if = "Option::is_none")]
102 pub page_key: Option<String>
103}
104
105#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
106#[serde(rename_all = "camelCase")]
107pub struct RsLookupMovie {
108 pub name: Option<String>,
109 pub ids: Option<RsIds>,
110
111 #[serde(skip_serializing_if = "Option::is_none")]
112 pub page_key: Option<String>
113}
114
115#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, strum_macros::Display, EnumString)]
116#[serde(rename_all = "camelCase")]
117#[strum(serialize_all = "camelCase")]
118pub enum RsLookupQuery {
119 Book(RsLookupBook),
120 Media(RsLookupMedia),
121 Episode(RsLookupEpisode),
122 Movie(RsLookupMovie),
123 Person(RsLookupPerson),
124 Serie(RsLookupSerie),
125 SerieSeason(RsLookupSerieSeason),
126 Song(RsLookupSong),
127}
128
129#[derive(
130 Debug, Serialize, Deserialize, Clone, PartialEq, strum_macros::Display, EnumString,
131)]
132#[serde(rename_all = "camelCase")]
133#[strum(serialize_all = "camelCase")]
134pub enum RsLookupMatchType {
135 ExactId,
136 ExactText,
137}
138
139#[derive(
140 Debug, Serialize, Deserialize, Clone, PartialEq, strum_macros::Display, EnumString, Default,
141)]
142#[serde(rename_all = "camelCase")]
143#[strum(serialize_all = "camelCase")]
144pub enum RsLookupMetadataResult {
145 Book(Book),
146 Media(Media),
147 Episode(Episode),
148 Movie(Movie),
149 Person(Person),
150 Serie(Serie),
151 #[default]
152 None,
153}
154
155#[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq)]
156#[serde(rename_all = "camelCase")]
157pub struct RsLookupMetadataResults {
158 pub results: Vec<RsLookupMetadataResultWrapper>,
159
160 #[serde(skip_serializing_if = "Option::is_none")]
161 pub next_page_key: Option<String>,
162
163}
164
165#[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq)]
166#[serde(rename_all = "camelCase")]
167pub struct RsLookupMetadataResultWrapper {
168 pub metadata: RsLookupMetadataResult,
169
170 #[serde(skip_serializing_if = "Option::is_none")]
171 pub relations: Option<Relations>,
172
173 #[serde(skip_serializing_if = "Option::is_none")]
174 pub match_type: Option<RsLookupMatchType>,
175
176}
177
178#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
179#[serde(rename_all = "camelCase")]
180pub struct RsLookupWrapper {
181 pub query: RsLookupQuery,
182 pub credential: Option<PluginCredential>,
183 pub params: Option<HashMap<String, CustomParamTypes>>,
184}