diff --git a/Cargo.lock b/Cargo.lock index 675f339..9495201 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5,6 +5,8 @@ name = "animebox-sync" version = "0.1.0" dependencies = [ "clap", + "serde", + "serde_json", ] [[package]] @@ -57,18 +59,90 @@ dependencies = [ "libc", ] +[[package]] +name = "itoa" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" + [[package]] name = "libc" version = "0.2.70" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3baa92041a6fec78c687fa0cc2b3fae8884f743d672cf551bed1d6dac6988d0f" +[[package]] +name = "proc-macro2" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1502d12e458c49a4c9cbff560d0fe0060c252bc29799ed94ca2ed4bb665a0101" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54a21852a652ad6f610c9510194f398ff6f8692e334fd1145fed931f7fbe44ea" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ryu" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3d612bc64430efeb3f7ee6ef26d590dce0c43249217bddc62112540c7941e1" + +[[package]] +name = "serde" +version = "1.0.110" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99e7b308464d16b56eba9964e4972a3eee817760ab60d88c3f86e1fecb08204c" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.110" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "818fbf6bfa9a42d3bfcaca148547aa00c7b915bec71d1757aa2d44ca68771984" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "993948e75b189211a9b31a7528f950c6adc21f9720b6438ff80a7fa2f864cea2" +dependencies = [ + "itoa", + "ryu", + "serde", +] + [[package]] name = "strsim" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +[[package]] +name = "syn" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95b5f192649e48a5302a13f2feb224df883b98933222369e4b3b0fe2a5447269" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + [[package]] name = "textwrap" version = "0.11.0" @@ -84,6 +158,12 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" +[[package]] +name = "unicode-xid" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" + [[package]] name = "vec_map" version = "0.8.2" diff --git a/Cargo.toml b/Cargo.toml index 1eb1eea..4114b6e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,3 +13,5 @@ incremental = false # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] clap = "2.33.1" +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" \ No newline at end of file diff --git a/src/model.rs b/src/model.rs index bfac319..c61ca88 100644 --- a/src/model.rs +++ b/src/model.rs @@ -1,30 +1,50 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize)] struct AnimeBoxesBackup { - backupTime: String, - backupVersion: String, - bannedTags: Vec, - creatorName: String, - creatorVersion: String, + #[serde(rename(serialize = "backupTime", deserialize = "backup_time"))] + backup_time: String, + #[serde(rename(serialize = "backupVersion", deserialize = "backup_version"))] + backup_version: String, + #[serde(rename(serialize = "bannedTags", deserialize = "banned_tags"))] + banned_tags: Vec, + #[serde(rename(serialize = "creatorName", deserialize = "creator_name"))] + creator_name: String, + #[serde(rename(serialize = "creatorVersion", deserialize = "creator_version"))] + creator_version: String, favorites: Vec, - searchHistory: Vec, + #[serde(rename(serialize = "searchHistory", deserialize = "search_history"))] + search_history: Vec, servers: Vec, } +#[derive(Serialize, Deserialize)] struct AnimeBoxesFavorite { - dateAdded: String, - disableStorage: bool, - enforceOriginalImage: bool, + #[serde(rename(serialize = "dateAdded", deserialize = "date_added"))] + date_added: String, + #[serde(rename(serialize = "disableStorage", deserialize = "disable_storage"))] + disable_storage: bool, + #[serde(rename( + serialize = "enforceOriginalImage", + deserialize = "enforce_original_image" + ))] + enforce_original_image: bool, file: AnimeBoxesFavoriteFile, has_children: bool, has_comments: bool, has_notes: bool, - imageIsVisible: bool, - isFavorite: bool, - isVisible: bool, + #[serde(rename(serialize = "imageIsVisible", deserialize = "image_is_visible"))] + image_is_visible: bool, + #[serde(rename(serialize = "isFavorite", deserialize = "is_favorite"))] + is_favorite: bool, + #[serde(rename(serialize = "isVisible", deserialize = "is_visible"))] + is_visible: bool, jpeg: Option, md5: String, parent_id: String, ppost_id: String, - ppostUrl: String, + #[serde(rename(serialize = "ppostUrl", deserialize = "ppost_url"))] + ppost_url: String, preview: AnimeBoxesFavoritePreview, rating: String, sample: AnimeBoxesFavoriteSample, @@ -37,57 +57,86 @@ struct AnimeBoxesFavorite { tags: String, } +#[derive(Serialize, Deserialize)] struct AnimeBoxesFavoriteFile { - contentType: i8, + #[serde(rename(serialize = "contentType", deserialize = "content_type"))] + content_type: i8, ext: String, height: i16, url: String, width: i16, } +#[derive(Serialize, Deserialize)] struct AnimeBoxesFavoriteJpeg { - contentType: i8, + #[serde(rename(serialize = "contentType", deserialize = "content_type"))] + content_type: i8, ext: String, height: i16, url: String, width: i16, } +#[derive(Serialize, Deserialize)] struct AnimeBoxesFavoritePreview { - contentType: i8, + #[serde(rename(serialize = "contentType", deserialize = "content_type"))] + content_type: i8, ext: String, height: i16, url: String, width: i16, } +#[derive(Serialize, Deserialize)] struct AnimeBoxesFavoriteSample { - contentType: i8, + #[serde(rename(serialize = "contentType", deserialize = "content_type"))] + content_type: i8, ext: String, height: i16, url: String, width: i16, } +#[derive(Serialize, Deserialize)] struct AnimeBoxesSearch { - itemId: i32, - searchDate: String, - searchText: String, + #[serde(rename(serialize = "itemId", deserialize = "item_id"))] + item_id: i32, + #[serde(rename(serialize = "searchDate", deserialize = "search_date"))] + search_date: String, + #[serde(rename(serialize = "searchText", deserialize = "search_text"))] + search_text: String, starred: bool, } +#[derive(Serialize, Deserialize)] struct AnimeBoxesServer { apikey: String, - isDefault: bool, - isSelected: bool, + #[serde(rename(serialize = "isDefault", deserialize = "is_default"))] + is_default: bool, + #[serde(rename(serialize = "isSelected", deserialize = "is_selected"))] + is_selected: bool, password: String, - passwordKey: String, - ratingFilterEnabled: bool, - realURL: String, - serverId: i16, - serverName: String, + #[serde(rename(serialize = "passwordKey", deserialize = "password_key"))] + password_key: String, + #[serde(rename( + serialize = "ratingFilterEnabled", + deserialize = "rating_filter_enabled" + ))] + rating_filter_enabled: bool, + #[serde(rename(serialize = "realURL", deserialize = "real_url"))] + real_url: String, + #[serde(rename(serialize = "serverId", deserialize = "server_id"))] + server_id: i16, + #[serde(rename(serialize = "serverName", deserialize = "server_name"))] + server_name: String, + #[serde(rename(serialize = "type", deserialize = "type_"))] type_: i16, url: String, - useNativeAutocomplete: bool, - userName: String, + #[serde(rename( + serialize = "useNativeAutocomplete", + deserialize = "use_native_autocomplete" + ))] + use_native_autocomplete: bool, + #[serde(rename(serialize = "userName", deserialize = "user_name"))] + user_name: String, }