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
use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};
#[derive(Debug, Deserialize, Serialize)]
#[serde(untagged)]
pub enum MangaFollowsAPI {
	Error { status: String, message: String },
	Data { result: Vec<FollowsMangaData> },
}
#[derive(Debug, Deserialize, Serialize)]
pub struct FollowsMangaData {
	pub manga_id: u32,
	pub follow_type: FollowType,
	pub volume: String,
	pub chapter: String,
}
#[derive(Debug, Deserialize_repr, Serialize_repr)]
#[repr(u8)]
pub enum FollowType {
	Reading = 1,
	Completed = 2,
	OnHold = 3,
	PlanToRead = 4,
	Dropped = 5,
	ReReading = 6,
	#[serde(default)]
	NotReading = 0,
}

#[cfg(test)]
mod test {
	use super::MangaFollowsAPI;
	use crate::test_data::*;
	use serde_json::from_str;
	#[test]
	fn it_decodes_a_minimal_list_of_follows() -> R {
		let ok: MangaFollowsAPI = from_str(TEST_FOLLOWS_OK)?;
		eprintln!("{:?}", ok);
		let err: MangaFollowsAPI = from_str(TEST_FOLLOWS_ERR)?;
		eprintln!("{:?}", err);
		Ok(())
	}
}