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::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, Default,
131)]
132#[serde(rename_all = "camelCase")]
133#[strum(serialize_all = "camelCase")]
134pub enum RsLookupMetadataResult {
135 Book(Book),
136 Media(Media),
137 Episode(Episode),
138 Movie(Movie),
139 Person(Person),
140 Serie(Serie),
141 #[default]
142 None,
143}
144
145#[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq)]
146#[serde(rename_all = "camelCase")]
147pub struct RsLookupMetadataResults {
148 pub results: Vec<RsLookupMetadataResultWrapper>,
149
150 #[serde(skip_serializing_if = "Option::is_none")]
151 pub next_page_key: Option<String>,
152
153}
154
155#[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq)]
156#[serde(rename_all = "camelCase")]
157pub struct RsLookupMetadataResultWrapper {
158 pub metadata: RsLookupMetadataResult,
159
160 #[serde(skip_serializing_if = "Option::is_none")]
161 pub relations: Option<Relations>,
162
163}
164
165#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
166#[serde(rename_all = "camelCase")]
167pub struct RsLookupWrapper {
168 pub query: RsLookupQuery,
169 pub credential: Option<PluginCredential>,
170 pub params: Option<HashMap<String, String>>,
171}