diff --git a/src/main.rs b/src/main.rs index ba6cb90..b9c2c41 100644 --- a/src/main.rs +++ b/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>( + path: P, +) -> Result> { + 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()) } diff --git a/src/model.rs b/src/model.rs index c61ca88..13a0059 100644 --- a/src/model.rs +++ b/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, - #[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, - #[serde(rename(serialize = "searchHistory", deserialize = "search_history"))] + #[serde(rename(serialize = "searchHistory", deserialize = "searchHistory"))] search_history: Vec, servers: Vec, } -#[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, 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, }