1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
use serde::Deserialize;
use crate::{Category, Credits, ReleaseType};
/// A release.
///
/// Typically represents an album, EP, or single which may contain multiple editions.
///
/// <https://github.com/OPSnet/Gazelle/blob/master/docs/07-API.md#torrent-group>
#[derive(Clone, Debug, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Group {
/// Album info formatted as HTML
pub wiki_body: String,
/// Album info formatted as BB code
pub bb_body: Option<String>,
/// Cover image URL
pub wiki_image: String,
/// ID number
pub id: u32,
/// Release Name
pub name: String,
/// Release Year
pub year: u16,
/// Record label
///
/// *RED only*
pub record_label: Option<String>,
/// Release catalogue number
///
/// *RED only*
pub catalogue_number: Option<String>,
/// Release type
pub release_type: ReleaseType,
/// Category
pub category_id: Category,
/// Category name
pub category_name: String,
/// Time of last logged event
pub time: String,
/// Is this a Vanity House release?
pub vanity_house: bool,
/// Is this release bookmarked?
pub is_bookmarked: bool,
/// Tags
pub tags: Vec<String>,
/// Release credits.
///
/// Artists, composers, etc.
pub music_info: Option<Credits>,
}
#[cfg(feature = "mock")]
impl Group {
/// Create a mock Group for testing
#[must_use]
pub fn mock() -> Self {
Self {
id: 123,
name: "Test Album".to_owned(),
year: 2020,
record_label: Some("Test Label".to_owned()),
catalogue_number: Some("TEST-001".to_owned()),
category_id: Category::Music,
category_name: "Music".to_owned(),
time: "2020-01-01 00:00:00".to_owned(),
vanity_house: false,
is_bookmarked: false,
music_info: None,
tags: vec!["rock".to_owned()],
wiki_body: "Test wiki body".to_owned(),
bb_body: None,
wiki_image: "https://example.com/image.jpg".to_owned(),
release_type: ReleaseType::Album,
}
}
}