mediafire_rs 0.2.1

Downloads files and folders from mediafire
use crate::types::permissions::Permissions;
use serde::{Deserialize, Deserializer, Serialize, de};

fn u64_from_str<'a, T>(deserializer: T) -> Result<u64, T::Error>
where
    T: Deserializer<'a>,
{
    let s = String::deserialize(deserializer)?;
    s.parse::<u64>().map_err(de::Error::custom)
}

#[derive(Serialize, Deserialize, Debug, Clone, Eq, PartialEq)]
pub struct File {
    pub quickkey: String,
    pub hash: String,
    pub filename: String,
    pub description: String,
    #[serde(deserialize_with = "u64_from_str")]
    pub size: u64,
    pub privacy: String,
    pub created: String,
    pub password_protected: String,
    pub mimetype: String,
    pub filetype: String,
    pub view: String,
    pub edit: String,
    pub revision: String,
    pub flag: String,
    pub permissions: Permissions,
    pub downloads: String,
    pub views: String,
    pub links: Links,
    pub created_utc: String,
}

#[derive(Serialize, Deserialize, Debug, Clone, Eq, PartialEq)]
pub struct Links {
    pub normal_download: String,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct FileInfo {
    pub quickkey: String,
    pub filename: String,
    pub ready: String,
    pub created: String,
    pub description: String,
    #[serde(deserialize_with = "u64_from_str")]
    pub size: u64,
    pub privacy: String,
    pub password_protected: String,
    pub hash: String,
    pub filetype: String,
    pub mimetype: String,
    pub owner_name: String,
    pub flag: String,
    pub permissions: Permissions,
    pub revision: String,
    pub view: String,
    pub edit: String,
    pub links: Links,
    pub created_utc: String,
}

impl From<FileInfo> for File {
    fn from(file_info: FileInfo) -> Self {
        File {
            quickkey: file_info.quickkey,
            hash: file_info.hash,
            filename: file_info.filename,
            description: file_info.description,
            size: file_info.size,
            privacy: file_info.privacy,
            created: file_info.created,
            password_protected: file_info.password_protected,
            mimetype: file_info.mimetype,
            filetype: file_info.filetype,
            view: file_info.view,
            edit: file_info.edit,
            revision: file_info.revision,
            flag: file_info.flag,
            permissions: file_info.permissions,
            downloads: "".to_string(),
            views: "".to_string(),
            links: file_info.links,
            created_utc: file_info.created_utc,
        }
    }
}