11use chrono:: { DateTime , Utc } ;
2- use serde:: { Deserialize , Serialize } ;
3- use utoipa :: ToSchema ;
2+ use serde:: Deserialize ;
3+ use serde_with :: serde_as ;
44
5- use bson:: serde_helpers:: {
6- chrono_datetime_as_bson_datetime, chrono_datetime_as_bson_datetime_optional,
7- } ;
5+ use bson:: serde_helpers:: datetime:: FromChrono04DateTime ;
86
9- #[ derive( Debug , Serialize , Deserialize , Clone , ToSchema ) ]
7+ #[ serde_as]
8+ #[ derive( Debug , Deserialize , Clone ) ]
109pub struct Category {
1110 #[ serde( alias = "_id" ) ]
1211 pub id : i32 ,
@@ -17,10 +16,8 @@ pub struct Category {
1716 pub url : Option < String > ,
1817 #[ serde( rename = "iconUrl" ) ]
1918 pub icon_url : Option < String > ,
20- #[ serde(
21- rename = "dateModified" ,
22- deserialize_with = "chrono_datetime_as_bson_datetime::deserialize"
23- ) ]
19+ #[ serde_as( as = "FromChrono04DateTime" ) ]
20+ #[ serde( rename = "dateModified" ) ]
2421 pub date_modified : DateTime < Utc > ,
2522 #[ serde( rename = "isClass" ) ]
2623 pub is_class : Option < bool > ,
@@ -31,11 +28,12 @@ pub struct Category {
3128 #[ serde( rename = "displayIndex" ) ]
3229 pub display_index : i32 ,
3330
34- #[ serde ( deserialize_with = "chrono_datetime_as_bson_datetime::deserialize " ) ]
31+ #[ serde_as ( as = "FromChrono04DateTime " ) ]
3532 pub sync_at : DateTime < Utc > ,
3633}
3734
38- #[ derive( Debug , Serialize , Deserialize , Clone , ToSchema ) ]
35+ #[ serde_as]
36+ #[ derive( Debug , Deserialize , Clone ) ]
3937pub struct CategoryInfo {
4038 pub id : Option < i32 > ,
4139 #[ serde( rename = "gameId" ) ]
@@ -45,10 +43,8 @@ pub struct CategoryInfo {
4543 pub url : Option < String > ,
4644 #[ serde( rename = "iconUrl" ) ]
4745 pub icon_url : Option < String > ,
48- #[ serde(
49- rename = "dateModified" ,
50- deserialize_with = "chrono_datetime_as_bson_datetime_optional::deserialize"
51- ) ]
46+ #[ serde( rename = "dateModified" ) ]
47+ #[ serde_as( as = "Option<FromChrono04DateTime>" ) ]
5248 pub date_modified : Option < DateTime < Utc > > ,
5349 #[ serde( rename = "isClass" ) ]
5450 pub is_class : Option < bool > ,
@@ -60,7 +56,8 @@ pub struct CategoryInfo {
6056 pub display_index : Option < i32 > ,
6157}
6258
63- #[ derive( Debug , Serialize , Deserialize , Clone , ToSchema ) ]
59+ #[ serde_as]
60+ #[ derive( Debug , Deserialize , Clone ) ]
6461pub struct File {
6562 #[ serde( alias = "_id" ) ]
6663 pub id : i32 ,
@@ -79,10 +76,8 @@ pub struct File {
7976 #[ serde( rename = "fileStatus" ) ]
8077 pub file_status : Option < i32 > ,
8178 pub hashes : Option < Vec < Hash > > ,
82- #[ serde(
83- rename = "fileDate" ,
84- deserialize_with = "chrono_datetime_as_bson_datetime_optional::deserialize"
85- ) ]
79+ #[ serde( rename = "fileDate" ) ]
80+ #[ serde_as( as = "Option<FromChrono04DateTime>" ) ]
8681 pub file_date : Option < DateTime < Utc > > ,
8782 #[ serde( rename = "fileLength" ) ]
8883 pub file_length : Option < i64 > ,
@@ -109,20 +104,19 @@ pub struct File {
109104 pub server_pack_file_id : Option < i32 > ,
110105 #[ serde( rename = "isEarlyAccessContent" ) ]
111106 pub is_early_access_content : Option < bool > ,
112- #[ serde(
113- rename = "earlyAccessEndDate" ,
114- deserialize_with = "chrono_datetime_as_bson_datetime_optional::deserialize"
115- ) ]
107+ #[ serde( rename = "earlyAccessEndDate" ) ]
108+ #[ serde_as( as = "Option<FromChrono04DateTime>" ) ]
116109 pub early_access_end_date : Option < DateTime < Utc > > ,
117110 #[ serde( rename = "fileFingerprint" ) ]
118111 pub file_fingerprint : Option < i64 > ,
119112 pub modules : Option < Vec < Module > > ,
120113
121- #[ serde ( deserialize_with = "chrono_datetime_as_bson_datetime::deserialize " ) ]
114+ #[ serde_as ( as = "FromChrono04DateTime " ) ]
122115 pub sync_at : DateTime < Utc > ,
123116}
124117
125- #[ derive( Debug , Serialize , Deserialize , Clone , ToSchema ) ]
118+ #[ serde_as]
119+ #[ derive( Debug , Deserialize , Clone ) ]
126120pub struct FileInfo {
127121 pub id : i32 ,
128122 #[ serde( rename = "gameId" ) ]
@@ -140,10 +134,8 @@ pub struct FileInfo {
140134 #[ serde( rename = "fileStatus" ) ]
141135 pub file_status : Option < i32 > ,
142136 pub hashes : Option < Vec < Hash > > ,
143- #[ serde(
144- rename = "fileDate" ,
145- deserialize_with = "chrono_datetime_as_bson_datetime_optional::deserialize"
146- ) ]
137+ #[ serde( rename = "fileDate" ) ]
138+ #[ serde_as( as = "Option<FromChrono04DateTime>" ) ]
147139 pub file_date : Option < DateTime < Utc > > ,
148140 #[ serde( rename = "fileLength" ) ]
149141 pub file_length : Option < i64 > ,
@@ -170,17 +162,16 @@ pub struct FileInfo {
170162 pub server_pack_file_id : Option < i32 > ,
171163 #[ serde( rename = "isEarlyAccessContent" ) ]
172164 pub is_early_access_content : Option < bool > ,
173- #[ serde(
174- rename = "earlyAccessEndDate" ,
175- deserialize_with = "chrono_datetime_as_bson_datetime_optional::deserialize"
176- ) ]
165+ #[ serde( rename = "earlyAccessEndDate" ) ]
166+ #[ serde_as( as = "Option<FromChrono04DateTime>" ) ]
177167 pub early_access_end_date : Option < DateTime < Utc > > ,
178168 #[ serde( rename = "fileFingerprint" ) ]
179169 pub file_fingerprint : Option < i64 > ,
180170 pub modules : Option < Vec < Module > > ,
181171}
182172
183- #[ derive( Debug , Serialize , Deserialize , Clone , ToSchema ) ]
173+ #[ serde_as]
174+ #[ derive( Debug , Deserialize , Clone ) ]
184175pub struct Mod {
185176 #[ serde( alias = "_id" ) ]
186177 pub id : i32 ,
@@ -209,20 +200,14 @@ pub struct Mod {
209200 pub latest_files : Option < Vec < FileInfo > > ,
210201 #[ serde( rename = "latestFilesIndexes" ) ]
211202 pub latest_files_indexes : Option < Vec < FileIndex > > ,
212- #[ serde(
213- rename = "dateCreated" ,
214- deserialize_with = "chrono_datetime_as_bson_datetime_optional::deserialize"
215- ) ]
203+ #[ serde( rename = "dateCreated" ) ]
204+ #[ serde_as( as = "Option<FromChrono04DateTime>" ) ]
216205 pub date_created : Option < DateTime < Utc > > ,
217- #[ serde(
218- rename = "dateModified" ,
219- deserialize_with = "chrono_datetime_as_bson_datetime_optional::deserialize"
220- ) ]
206+ #[ serde( rename = "dateModified" ) ]
207+ #[ serde_as( as = "Option<FromChrono04DateTime>" ) ]
221208 pub date_modified : Option < DateTime < Utc > > ,
222- #[ serde(
223- rename = "dateReleased" ,
224- deserialize_with = "chrono_datetime_as_bson_datetime_optional::deserialize"
225- ) ]
209+ #[ serde( rename = "dateReleased" ) ]
210+ #[ serde_as( as = "Option<FromChrono04DateTime>" ) ]
226211 pub date_released : Option < DateTime < Utc > > ,
227212 #[ serde( rename = "allowModDistribution" ) ]
228213 pub allow_mod_distribution : Option < bool > ,
@@ -234,61 +219,65 @@ pub struct Mod {
234219 pub thumbs_up_count : Option < i32 > ,
235220 pub rating : Option < i32 > ,
236221
237- #[ serde ( deserialize_with = "chrono_datetime_as_bson_datetime::deserialize " ) ]
222+ #[ serde_as ( as = "FromChrono04DateTime " ) ]
238223 pub sync_at : DateTime < Utc > ,
239224}
240225
241- // #[derive(Debug, Serialize, Deserialize, Clone, ToSchema)]
226+ // #[serde_as]
227+ // #[derive(Debug, Deserialize, Clone)]
242228// pub struct Fingerprint {
243229// #[serde(alias = "_id")]
244230// pub id: i64,
245231// pub file: FileInfo,
246232// #[serde(rename = "latestFiles")]
247233// pub latest_files: Vec<FileInfo>,
248234
249- // #[serde(deserialize_with = "chrono_datetime_as_bson_datetime::deserialize ")]
235+ // #[serde_as(as = "FromChrono04DateTime ")]
250236// pub sync_at: DateTime<Utc>,
251237// }
252238
253- #[ derive( Debug , Serialize , Deserialize , Clone , ToSchema ) ]
239+ #[ serde_as]
240+ #[ derive( Debug , Deserialize , Clone ) ]
254241pub struct FileDependencies {
255242 #[ serde( rename = "modId" ) ]
256243 pub mod_id : i32 ,
257244 #[ serde( rename = "relationType" ) ]
258245 pub relation_type : Option < i32 > ,
259246}
260247
261- #[ derive( Debug , Serialize , Deserialize , Clone , ToSchema ) ]
248+ #[ serde_as]
249+ #[ derive( Debug , Deserialize , Clone ) ]
262250pub struct FileSortableGameVersions {
263251 #[ serde( rename = "gameVersionName" ) ]
264252 pub game_version_name : Option < String > ,
265253 #[ serde( rename = "gameVersionPadded" ) ]
266254 pub game_version_padded : Option < String > ,
267255 #[ serde( rename = "gameVersion" ) ]
268256 pub game_version : Option < String > ,
269- #[ serde(
270- rename = "gameVersionReleaseDate" ,
271- deserialize_with = "chrono_datetime_as_bson_datetime_optional::deserialize"
272- ) ]
257+ #[ serde( rename = "gameVersionReleaseDate" ) ]
258+ #[ serde_as( as = "Option<FromChrono04DateTime>" ) ]
273259 pub game_version_release_date : Option < DateTime < Utc > > ,
274260 #[ serde( rename = "gameVersionTypeId" ) ]
275261 pub game_version_type_id : Option < i32 > ,
276262}
277263
278- #[ derive( Debug , Serialize , Deserialize , Clone , ToSchema ) ]
264+ #[ serde_as]
265+ #[ derive( Debug , Deserialize , Clone ) ]
279266pub struct Hash {
280267 pub value : String ,
281268 pub algo : i32 ,
282269}
283270
284- #[ derive( Debug , Serialize , Deserialize , Clone , ToSchema ) ]
271+ #[ serde_as]
272+ #[ derive( Debug , Deserialize , Clone ) ]
285273pub struct Author {
286274 pub id : i32 ,
287275 pub name : String ,
288276 pub url : Option < String > ,
289277}
290278
291- #[ derive( Debug , Serialize , Deserialize , Clone , ToSchema ) ]
279+ #[ serde_as]
280+ #[ derive( Debug , Deserialize , Clone ) ]
292281pub struct Logo {
293282 pub id : i32 ,
294283 #[ serde( rename = "modId" ) ]
@@ -300,7 +289,8 @@ pub struct Logo {
300289 pub url : Option < String > ,
301290}
302291
303- #[ derive( Debug , Serialize , Deserialize , Clone , ToSchema ) ]
292+ #[ serde_as]
293+ #[ derive( Debug , Deserialize , Clone ) ]
304294pub struct Links {
305295 #[ serde( rename = "websiteUrl" ) ]
306296 pub website_url : Option < String > ,
@@ -312,7 +302,8 @@ pub struct Links {
312302 pub source_url : Option < String > ,
313303}
314304
315- #[ derive( Debug , Serialize , Deserialize , Clone , ToSchema ) ]
305+ #[ serde_as]
306+ #[ derive( Debug , Deserialize , Clone ) ]
316307pub struct ScreenShot {
317308 pub id : i32 ,
318309 #[ serde( rename = "modId" ) ]
@@ -324,13 +315,15 @@ pub struct ScreenShot {
324315 pub url : Option < String > ,
325316}
326317
327- #[ derive( Debug , Serialize , Deserialize , Clone , ToSchema ) ]
318+ #[ serde_as]
319+ #[ derive( Debug , Deserialize , Clone ) ]
328320pub struct Module {
329321 pub name : Option < String > ,
330322 pub fingerprint : Option < i64 > ,
331323}
332324
333- #[ derive( Debug , Serialize , Deserialize , Clone , ToSchema ) ]
325+ #[ serde_as]
326+ #[ derive( Debug , Deserialize , Clone ) ]
334327pub struct FileIndex {
335328 #[ serde( rename = "gameVersion" ) ]
336329 pub game_version : Option < String > ,
0 commit comments