1use {
5 crate::models::{
6 core::{Comment, Part, User},
7 Existing, Id,
8 },
9 either::Either,
10};
11
12#[rustfmt::skip]
13#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
14#[derive(serde::Deserialize, serde::Serialize)]
15pub struct Story {
16 pub name: String,
19 pub summary: String,
20
21 pub rating: Rating,
22 pub state: State,
23
24 pub authors: Vec<Existing<User>>,
25 pub commissioners: Vec<Existing<User>>,
26 pub dedicatees: Vec<Existing<User>>,
27
28 pub origins: Vec<Existing<Origin>>,
29 pub warnings: Vec<Existing<Warning>>,
30 pub pairings: Vec<Existing<Pairing>>,
31 pub characters: Vec<Existing<Character>>,
32 pub tags: Vec<Existing<Tag>>,
33
34 pub series: Option<Existing<Series>>,
38
39 pub chapters: Option<Either<Vec<Existing<Chapter>>, Vec<Id>>>,
43
44 pub words: i32,
50
51 pub comments: Vec<Existing<Comment>>,
52}
53
54#[rustfmt::skip]
55#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
56#[derive(serde::Deserialize, serde::Serialize)]
57pub struct Chapter {
58 pub name: Option<String>,
64
65 pub published: bool,
71
72 pub prefix: Vec<Existing<Part>>,
78
79 pub main: Vec<Existing<Part>>,
81
82 pub suffix: Vec<Existing<Part>>,
88
89 pub comments: Vec<Existing<Comment>>,
91
92 pub words: i64,
100}
101
102#[rustfmt::skip]
103#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
104#[derive(serde::Deserialize, serde::Serialize)]
105pub struct Series {
106 pub name: String,
109
110 pub summary: String,
111
112 pub state: State,
113
114 pub stories: Either<Vec<Existing<Story>>, Vec<Id>>,
118}
119
120#[rustfmt::skip]
121#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
122#[derive(serde::Deserialize, serde::Serialize)]
123pub struct Character {
124 pub content: String,
125
126 pub description: String,
127}
128
129#[rustfmt::skip]
130#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
131#[derive(serde::Deserialize, serde::Serialize)]
132pub struct Origin {
133 pub content: String,
134
135 pub description: String,
136}
137
138#[rustfmt::skip]
139#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
140#[derive(serde::Deserialize, serde::Serialize)]
141pub struct Pairing {
142 pub hash: String,
143
144 pub relationship: Relationship,
145
146 pub characters: Vec<Existing<Character>>,
147}
148
149#[rustfmt::skip]
150#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
151#[derive(serde::Deserialize, serde::Serialize)]
152pub enum Relationship {
153 Family,
154 Friends,
155 Romantic,
156}
157
158#[rustfmt::skip]
159#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
160#[derive(serde::Deserialize, serde::Serialize)]
161pub struct Tag {
162 pub content: String,
163
164 pub description: String,
165}
166
167#[rustfmt::skip]
168#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
169#[derive(serde::Deserialize, serde::Serialize)]
170pub struct Warning {
171 pub content: String,
172
173 pub description: String,
174}
175
176#[rustfmt::skip]
177#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
178#[derive(serde::Deserialize, serde::Serialize)]
179pub enum Rating {
180 Explicit,
181 Mature,
182 Teen,
183 General,
184}
185
186#[rustfmt::skip]
195#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
196#[derive(serde::Deserialize, serde::Serialize)]
197pub enum State {
198 Completed,
199 InProgress,
200 Hiatus,
201 Abandoned,
202}