use serde::{Deserialize, Serialize};
pub type Id = i64;
pub type CategoryId = i64;
pub type TagId = i64;
pub type UtcDateTime = String;
#[derive(Deserialize, PartialEq, Debug)]
pub struct ErrorResponse {
pub error: String,
}
#[derive(Deserialize)]
pub struct TorrentListResponse {
pub data: TorrentList,
}
#[derive(Deserialize, PartialEq, Debug)]
pub struct TorrentList {
pub total: u32,
pub results: Vec<ListItem>,
}
impl TorrentList {
#[must_use]
pub fn _contains(&self, torrent_id: Id) -> bool {
self.results.iter().any(|item| item.torrent_id == torrent_id)
}
}
#[derive(Deserialize, PartialEq, Debug)]
pub struct ListItem {
pub torrent_id: i64,
pub uploader: String,
pub info_hash: String,
pub title: String,
pub description: Option<String>,
pub category_id: i64,
pub date_uploaded: String,
pub file_size: i64,
pub seeders: i64,
pub leechers: i64,
pub name: String,
pub comment: Option<String>,
pub creation_date: Option<i64>,
pub created_by: Option<String>,
pub encoding: Option<String>,
}
#[derive(Deserialize, PartialEq, Debug)]
pub struct TorrentDetailsResponse {
pub data: TorrentDetails,
}
#[derive(Deserialize, PartialEq, Debug)]
pub struct TorrentDetails {
pub torrent_id: Id,
pub uploader: String,
pub info_hash: String,
pub title: String,
pub description: String,
pub category: Category,
pub upload_date: UtcDateTime,
pub file_size: u64,
pub seeders: u64,
pub leechers: u64,
pub files: Vec<File>,
pub trackers: Vec<String>,
pub magnet_link: String,
pub tags: Vec<Tag>,
pub name: String,
pub comment: Option<String>,
pub creation_date: Option<i64>,
pub created_by: Option<String>,
pub encoding: Option<String>,
}
#[derive(Deserialize, PartialEq, Debug)]
pub struct Category {
pub id: CategoryId,
pub name: String,
pub num_torrents: u64,
}
#[derive(Deserialize, PartialEq, Debug)]
pub struct Tag {
pub tag_id: TagId,
pub name: String,
}
#[derive(Deserialize, PartialEq, Debug)]
pub struct File {
pub path: Vec<String>,
pub length: u64,
pub md5sum: Option<String>,
}
#[derive(Deserialize, PartialEq, Debug)]
pub struct UploadedTorrentResponse {
pub data: UploadedTorrent,
}
#[derive(Deserialize, Serialize, PartialEq, Debug)]
pub struct UploadedTorrent {
pub torrent_id: Id,
pub info_hash: String,
}
#[derive(Deserialize, PartialEq, Debug)]
pub struct DeletedTorrentResponse {
pub data: DeletedTorrent,
}
#[derive(Deserialize, PartialEq, Debug)]
pub struct DeletedTorrent {
pub torrent_id: Id,
}
#[derive(Deserialize, PartialEq, Debug)]
pub struct UpdatedTorrentResponse {
pub data: UpdatedTorrent,
}
pub type UpdatedTorrent = TorrentDetails;