A tool to read animebox backup files and export the data in alternate formats.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

142 lines
4.7 KiB

use chrono::DateTime;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
pub struct AnimeBoxesBackup {
#[serde(rename(serialize = "backupTime", deserialize = "backupTime"))]
backup_time: DateTime<chrono::Utc>,
#[serde(rename(serialize = "backupVersion", deserialize = "backupVersion"))]
backup_version: String,
#[serde(rename(serialize = "bannedTags", deserialize = "bannedTags"))]
banned_tags: Vec<String>,
#[serde(rename(serialize = "creatorName", deserialize = "creatorName"))]
creator_name: String,
#[serde(rename(serialize = "creatorVersion", deserialize = "creatorVersion"))]
creator_version: String,
favorites: Vec<AnimeBoxesFavorite>,
#[serde(rename(serialize = "searchHistory", deserialize = "searchHistory"))]
search_history: Vec<AnimeBoxesSearch>,
servers: Vec<AnimeBoxesServer>,
}
#[derive(Serialize, Deserialize, Debug)]
struct AnimeBoxesFavorite {
#[serde(rename(serialize = "dateAdded", deserialize = "dateAdded"))]
date_added: DateTime<chrono::Utc>,
#[serde(rename(serialize = "disableStorage", deserialize = "disableStorage"))]
disable_storage: bool,
#[serde(rename(
serialize = "enforceOriginalImage",
deserialize = "enforceOriginalImage"
))]
enforce_original_image: bool,
file: AnimeBoxesFavoriteFile,
has_children: bool,
has_comments: bool,
has_notes: bool,
#[serde(rename(serialize = "imageIsVisible", deserialize = "imageIsVisible"))]
image_is_visible: bool,
#[serde(rename(serialize = "isFavorite", deserialize = "isFavorite"))]
is_favorite: bool,
#[serde(rename(serialize = "isVisible", deserialize = "isVisible"))]
is_visible: bool,
jpeg: Option<AnimeBoxesFavoriteJpeg>,
md5: String,
parent_id: String,
#[serde(rename(serialize = "ppostId", deserialize = "ppostId"))]
ppost_id: String,
#[serde(rename(serialize = "ppostUrl", deserialize = "ppostUrl"))]
ppost_url: String,
preview: AnimeBoxesFavoritePreview,
rating: String,
sample: AnimeBoxesFavoriteSample,
score: i16,
source: String,
tag_artist: String,
tag_character: String,
tag_copyright: String,
tag_general: String,
tags: String,
}
#[derive(Serialize, Deserialize, Debug)]
struct AnimeBoxesFavoriteFile {
#[serde(rename(serialize = "contentType", deserialize = "contentType"))]
content_type: i8,
ext: String,
height: i16,
url: String,
width: i16,
}
#[derive(Serialize, Deserialize, Debug)]
struct AnimeBoxesFavoriteJpeg {
#[serde(rename(serialize = "contentType", deserialize = "contentType"))]
content_type: i8,
ext: String,
height: i16,
url: String,
width: i16,
}
#[derive(Serialize, Deserialize, Debug)]
struct AnimeBoxesFavoritePreview {
#[serde(rename(serialize = "contentType", deserialize = "contentType"))]
content_type: i8,
ext: String,
height: i16,
url: String,
width: i16,
}
#[derive(Serialize, Deserialize, Debug)]
struct AnimeBoxesFavoriteSample {
#[serde(rename(serialize = "contentType", deserialize = "contentType"))]
content_type: i8,
ext: String,
height: i16,
url: String,
width: i16,
}
#[derive(Serialize, Deserialize, Debug)]
struct AnimeBoxesSearch {
#[serde(rename(serialize = "itemId", deserialize = "itemId"))]
item_id: i32,
#[serde(rename(serialize = "searchDate", deserialize = "searchDate"))]
search_date: DateTime<chrono::Utc>,
#[serde(rename(serialize = "searchText", deserialize = "searchText"))]
search_text: String,
starred: bool,
}
#[derive(Serialize, Deserialize, Debug)]
struct AnimeBoxesServer {
#[serde(rename(serialize = "apikey", deserialize = "apikey"))]
api_key: String,
#[serde(rename(serialize = "isDefault", deserialize = "isDefault"))]
is_default: bool,
#[serde(rename(serialize = "isSelected", deserialize = "isSelected"))]
is_selected: bool,
password: String,
#[serde(rename(serialize = "passwordKey", deserialize = "passwordKey"))]
password_key: String,
#[serde(rename(serialize = "ratingFilterEnabled", deserialize = "ratingFilterEnabled"))]
rating_filter_enabled: bool,
#[serde(rename(serialize = "realURL", deserialize = "realURL"))]
real_url: String,
#[serde(rename(serialize = "serverId", deserialize = "serverId"))]
server_id: i16,
#[serde(rename(serialize = "serverName", deserialize = "serverName"))]
server_name: String,
#[serde(rename(serialize = "type", deserialize = "type"))]
type_: i16,
url: String,
#[serde(rename(
serialize = "useNativeAutocomplete",
deserialize = "useNativeAutocomplete"
))]
use_native_autocomplete: bool,
#[serde(rename(serialize = "userName", deserialize = "userName"))]
user_name: String,
}