Browse Source

Adapted serde to parse example animeboxes backup

master
Drew Short 4 years ago
parent
commit
dc81e4c68a
  1. 20
      src/main.rs
  2. 82
      src/model.rs

20
src/main.rs

@ -1,9 +1,23 @@
use clap::{App, Arg};
use serde_json::from_reader;
use std::error::Error;
use std::fs::File;
use std::io::BufReader;
use std::path::Path;
const VERSION: Option<&'static str> = option_env!("CARGO_PKG_VERSION");
mod model;
fn read_animeboxes_backup<P: AsRef<Path>>(
path: P,
) -> Result<model::AnimeBoxesBackup, Box<dyn Error>> {
let file = File::open(path)?;
let reader = BufReader::new(file);
let result: model::AnimeBoxesBackup = from_reader(reader)?;
Ok(result)
}
fn main() {
let matches = App::new("AnimeBoxes Sync")
.version(VERSION.unwrap_or("UNKNOWN"))
@ -25,5 +39,9 @@ fn main() {
.get_matches();
let config = matches.value_of("config").unwrap_or("abs-default.conf");
let file = matches.value_of("INPUT").unwrap();
let path = matches.value_of("INPUT").unwrap();
let result = read_animeboxes_backup(path);
println!("{:#?}", result.unwrap())
}

82
src/model.rs

@ -1,49 +1,50 @@
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
struct AnimeBoxesBackup {
#[serde(rename(serialize = "backupTime", deserialize = "backup_time"))]
#[derive(Serialize, Deserialize, Debug)]
pub struct AnimeBoxesBackup {
#[serde(rename(serialize = "backupTime", deserialize = "backupTime"))]
backup_time: String,
#[serde(rename(serialize = "backupVersion", deserialize = "backup_version"))]
#[serde(rename(serialize = "backupVersion", deserialize = "backupVersion"))]
backup_version: String,
#[serde(rename(serialize = "bannedTags", deserialize = "banned_tags"))]
#[serde(rename(serialize = "bannedTags", deserialize = "bannedTags"))]
banned_tags: Vec<String>,
#[serde(rename(serialize = "creatorName", deserialize = "creator_name"))]
#[serde(rename(serialize = "creatorName", deserialize = "creatorName"))]
creator_name: String,
#[serde(rename(serialize = "creatorVersion", deserialize = "creator_version"))]
#[serde(rename(serialize = "creatorVersion", deserialize = "creatorVersion"))]
creator_version: String,
favorites: Vec<AnimeBoxesFavorite>,
#[serde(rename(serialize = "searchHistory", deserialize = "search_history"))]
#[serde(rename(serialize = "searchHistory", deserialize = "searchHistory"))]
search_history: Vec<AnimeBoxesSearch>,
servers: Vec<AnimeBoxesServer>,
}
#[derive(Serialize, Deserialize)]
#[derive(Serialize, Deserialize, Debug)]
struct AnimeBoxesFavorite {
#[serde(rename(serialize = "dateAdded", deserialize = "date_added"))]
#[serde(rename(serialize = "dateAdded", deserialize = "dateAdded"))]
date_added: String,
#[serde(rename(serialize = "disableStorage", deserialize = "disable_storage"))]
#[serde(rename(serialize = "disableStorage", deserialize = "disableStorage"))]
disable_storage: bool,
#[serde(rename(
serialize = "enforceOriginalImage",
deserialize = "enforce_original_image"
deserialize = "enforceOriginalImage"
))]
enforce_original_image: bool,
file: AnimeBoxesFavoriteFile,
has_children: bool,
has_comments: bool,
has_notes: bool,
#[serde(rename(serialize = "imageIsVisible", deserialize = "image_is_visible"))]
#[serde(rename(serialize = "imageIsVisible", deserialize = "imageIsVisible"))]
image_is_visible: bool,
#[serde(rename(serialize = "isFavorite", deserialize = "is_favorite"))]
#[serde(rename(serialize = "isFavorite", deserialize = "isFavorite"))]
is_favorite: bool,
#[serde(rename(serialize = "isVisible", deserialize = "is_visible"))]
#[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 = "ppost_url"))]
#[serde(rename(serialize = "ppostUrl", deserialize = "ppostUrl"))]
ppost_url: String,
preview: AnimeBoxesFavoritePreview,
rating: String,
@ -57,9 +58,9 @@ struct AnimeBoxesFavorite {
tags: String,
}
#[derive(Serialize, Deserialize)]
#[derive(Serialize, Deserialize, Debug)]
struct AnimeBoxesFavoriteFile {
#[serde(rename(serialize = "contentType", deserialize = "content_type"))]
#[serde(rename(serialize = "contentType", deserialize = "contentType"))]
content_type: i8,
ext: String,
height: i16,
@ -67,9 +68,9 @@ struct AnimeBoxesFavoriteFile {
width: i16,
}
#[derive(Serialize, Deserialize)]
#[derive(Serialize, Deserialize, Debug)]
struct AnimeBoxesFavoriteJpeg {
#[serde(rename(serialize = "contentType", deserialize = "content_type"))]
#[serde(rename(serialize = "contentType", deserialize = "contentType"))]
content_type: i8,
ext: String,
height: i16,
@ -77,9 +78,9 @@ struct AnimeBoxesFavoriteJpeg {
width: i16,
}
#[derive(Serialize, Deserialize)]
#[derive(Serialize, Deserialize, Debug)]
struct AnimeBoxesFavoritePreview {
#[serde(rename(serialize = "contentType", deserialize = "content_type"))]
#[serde(rename(serialize = "contentType", deserialize = "contentType"))]
content_type: i8,
ext: String,
height: i16,
@ -87,9 +88,9 @@ struct AnimeBoxesFavoritePreview {
width: i16,
}
#[derive(Serialize, Deserialize)]
#[derive(Serialize, Deserialize, Debug)]
struct AnimeBoxesFavoriteSample {
#[serde(rename(serialize = "contentType", deserialize = "content_type"))]
#[serde(rename(serialize = "contentType", deserialize = "contentType"))]
content_type: i8,
ext: String,
height: i16,
@ -97,46 +98,43 @@ struct AnimeBoxesFavoriteSample {
width: i16,
}
#[derive(Serialize, Deserialize)]
#[derive(Serialize, Deserialize, Debug)]
struct AnimeBoxesSearch {
#[serde(rename(serialize = "itemId", deserialize = "item_id"))]
#[serde(rename(serialize = "itemId", deserialize = "itemId"))]
item_id: i32,
#[serde(rename(serialize = "searchDate", deserialize = "search_date"))]
#[serde(rename(serialize = "searchDate", deserialize = "searchDate"))]
search_date: String,
#[serde(rename(serialize = "searchText", deserialize = "search_text"))]
#[serde(rename(serialize = "searchText", deserialize = "searchText"))]
search_text: String,
starred: bool,
}
#[derive(Serialize, Deserialize)]
#[derive(Serialize, Deserialize, Debug)]
struct AnimeBoxesServer {
apikey: String,
#[serde(rename(serialize = "isDefault", deserialize = "is_default"))]
#[serde(rename(serialize = "isDefault", deserialize = "isDefault"))]
is_default: bool,
#[serde(rename(serialize = "isSelected", deserialize = "is_selected"))]
#[serde(rename(serialize = "isSelected", deserialize = "isSelected"))]
is_selected: bool,
password: String,
#[serde(rename(serialize = "passwordKey", deserialize = "password_key"))]
#[serde(rename(serialize = "passwordKey", deserialize = "passwordKey"))]
password_key: String,
#[serde(rename(
serialize = "ratingFilterEnabled",
deserialize = "rating_filter_enabled"
))]
#[serde(rename(serialize = "ratingFilterEnabled", deserialize = "ratingFilterEnabled"))]
rating_filter_enabled: bool,
#[serde(rename(serialize = "realURL", deserialize = "real_url"))]
#[serde(rename(serialize = "realURL", deserialize = "realURL"))]
real_url: String,
#[serde(rename(serialize = "serverId", deserialize = "server_id"))]
#[serde(rename(serialize = "serverId", deserialize = "serverId"))]
server_id: i16,
#[serde(rename(serialize = "serverName", deserialize = "server_name"))]
#[serde(rename(serialize = "serverName", deserialize = "serverName"))]
server_name: String,
#[serde(rename(serialize = "type", deserialize = "type_"))]
#[serde(rename(serialize = "type", deserialize = "type"))]
type_: i16,
url: String,
#[serde(rename(
serialize = "useNativeAutocomplete",
deserialize = "use_native_autocomplete"
deserialize = "useNativeAutocomplete"
))]
use_native_autocomplete: bool,
#[serde(rename(serialize = "userName", deserialize = "user_name"))]
#[serde(rename(serialize = "userName", deserialize = "userName"))]
user_name: String,
}
Loading…
Cancel
Save