use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use crate::models::{ConnectionStatus, TorrentsMap};
use crate::utilities::{deserializers, serializers};
#[derive(Debug, Deserialize, Serialize, Clone, Default, PartialEq)]
pub struct MainData {
pub rid: i64,
pub full_update: Option<bool>,
pub torrents: Option<TorrentsMap>,
pub torrents_removed: Option<Vec<String>>,
pub categories: Option<HashMap<String, Category>>,
pub categories_removed: Option<Vec<String>>,
pub tags: Option<Vec<String>>,
pub tags_removed: Option<Vec<String>>,
pub server_state: Option<ServerState>,
pub trackers: Option<HashMap<String, Vec<String>>>,
}
#[derive(Debug, Deserialize, Serialize, Clone, Default, PartialEq)]
pub struct Category {
pub name: String,
#[serde(rename = "savePath")]
pub save_path: String,
}
#[derive(Debug, Deserialize, Serialize, Clone, Default, PartialEq)]
pub struct ServerState {
pub alltime_dl: i64,
pub alltime_ul: i64,
pub average_time_queue: i64,
pub connection_status: ConnectionStatus,
pub dht_nodes: i64,
pub dl_info_data: i64,
pub dl_info_speed: i64,
pub dl_rate_limit: i64,
pub free_space_on_disk: i64,
#[serde(
deserialize_with = "deserializers::string_to_f64",
serialize_with = "serializers::f64_to_string"
)]
pub global_ratio: f64,
pub last_external_address_v4: String,
pub last_external_address_v6: String,
pub queued_io_jobs: i64,
pub queueing: bool,
#[serde(
deserialize_with = "deserializers::string_to_u64",
serialize_with = "serializers::u64_to_string"
)]
pub read_cache_hits: u64,
#[serde(
deserialize_with = "deserializers::string_to_u64",
serialize_with = "serializers::u64_to_string"
)]
pub read_cache_overload: u64,
pub refresh_interval: i64,
pub total_buffers_size: i64,
pub total_peer_connections: i64,
pub total_queued_size: i64,
pub total_wasted_session: i64,
pub up_info_data: i64,
pub up_info_speed: i64,
pub up_rate_limit: i64,
pub use_alt_speed_limits: bool,
pub use_subcategories: bool,
#[serde(
deserialize_with = "deserializers::string_to_u64",
serialize_with = "serializers::u64_to_string"
)]
pub write_cache_overload: u64,
}
#[derive(Debug, Deserialize, Serialize, Clone, Default, PartialEq)]
pub struct PeersData {
pub rid: i64,
pub full_update: Option<bool>,
pub show_flags: Option<bool>,
pub peers: Option<HashMap<String, Peer>>,
pub peers_removed: Option<Vec<String>>,
}
#[derive(Debug, Deserialize, Serialize, Clone, Default, PartialEq)]
pub struct Peer {
pub client: Option<String>,
pub connection: Option<String>,
pub country: Option<String>,
pub country_code: Option<String>,
pub dl_speed: Option<i64>,
pub downloaded: Option<i64>,
pub files: Option<String>,
pub flags: Option<String>,
pub flags_desc: Option<String>,
pub ip: Option<String>,
pub peer_id_client: Option<String>,
pub port: Option<i64>,
pub progress: Option<f32>,
pub relevance: Option<f32>,
pub up_speed: Option<i64>,
pub uploaded: Option<i64>,
}