Skip to main content

rs_plugin_common_interfaces/lookup/
mod.rs

1use 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}