diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/client.rs | 95 | ||||
| -rw-r--r-- | src/lib.rs | 9 | ||||
| -rw-r--r-- | src/types.rs | 82 |
3 files changed, 90 insertions, 96 deletions
diff --git a/src/client.rs b/src/client.rs index a771abb..06d55d6 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1,15 +1,4 @@ -use serde::Deserialize; -use serde_json::json; -use serde_repr::{Deserialize_repr, Serialize_repr}; -use thiserror::Error; - -#[derive(Error, Debug)] -pub enum HydrusError { - #[error("failed to connect to Hydrus")] - NetworkError(ureq::Error), - #[error("failed to deserialize data")] - DeserializeError(ureq::Error), -} +use crate::types::*; type Result<T> = std::result::Result<T, HydrusError>; @@ -19,82 +8,6 @@ pub struct HydrusClient { url: String, } -#[derive(Serialize_repr, Deserialize_repr, PartialEq, Debug)] -#[repr(u8)] -pub enum HydrusPermissions { - ImportAndEditURLs = 0, - ImportAndEditFiles, - EditFileTags, - SearchAndFetchFiles, - ManagePages, - ManageCookiesAndHeaders, - ManageDatabase, - EditFileNotes, - EditFileRelationships, - EditFileRatings, - ManagePopups, - EditFileTimes, - CommitPending, - SeeLocalPaths, -} - -#[derive(Deserialize)] -struct AccessKey { - access_key: String, -} - -#[derive(Deserialize)] -struct SessionKey { - session_key: String, -} - -#[derive(Deserialize)] -pub struct KeyInfo { - name: String, - permits_everything: bool, - basic_permissions: Vec<HydrusPermissions>, - human_permissions: String, -} - -#[derive(Serialize_repr, Deserialize_repr, PartialEq, Debug)] -#[repr(u8)] -pub enum ServiceType { - TagRepository = 0, - FileRepository, - LocalFileDomain, - LocalTagDomain = 5, - NumericalRating, - BoolRating, - AllKnownTags = 10, - AllKnownFiles, - LocalBooru, - IPFS, - Trash, - AllLocalFiles, - FileNotes = 17, - ClientAPI, - DeletedFromAnywhere, - LocalUpdates, - AllMyFiles, - IncDecRating, - ServerAdmin = 99, -} - -#[derive(Deserialize)] -pub struct Service { - name: String, - servicetype: ServiceType, - type_pretty: String, -} - -#[derive(Deserialize)] -pub struct GetService { - name: String, - service_key: String, - servicetype: ServiceType, - type_pretty: String, -} - impl HydrusClient { pub fn new(url: String) -> HydrusClient { HydrusClient { @@ -125,7 +38,7 @@ impl HydrusClient { req_url.push_str("&permit_everything=true"); } else { req_url.push_str("&basic_permissions="); - let json_string = serde_json::to_string(&json!(permissions)).unwrap(); + let json_string = musli::json::to_string(&permissions).unwrap(); req_url.push_str(&urlencoding::encode(&json_string)); }; @@ -135,12 +48,14 @@ impl HydrusClient { return Err(HydrusError::NetworkError(error)); } - let key = response.unwrap().body_mut().read_json::<AccessKey>(); + let key = response.unwrap().body_mut().read_to_vec(); if let Err(error) = key { return Err(HydrusError::DeserializeError(error)); }; + let accesskey: String = musli::json::decode(key.unwrap().as_slice()).unwrap(); + Ok(key.unwrap().access_key) } @@ -1,12 +1,9 @@ pub mod client; +pub mod types; #[cfg(test)] mod tests { - use serde_json::json; - - use crate::client::HydrusPermissions; - - use super::*; + use crate::types::*; #[test] fn correct_permissions_number() { @@ -33,7 +30,7 @@ mod tests { HydrusPermissions::ImportAndEditFiles, HydrusPermissions::SeeLocalPaths, ]; - let json_string = serde_json::to_string(&json!(perms)).unwrap(); + let json_string = musli::json::to_string(&perms).unwrap(); let encoded = urlencoding::encode(&json_string); assert_eq!(encoded, "%5B0%2C1%2C13%5D") diff --git a/src/types.rs b/src/types.rs new file mode 100644 index 0000000..d13a8aa --- /dev/null +++ b/src/types.rs @@ -0,0 +1,82 @@ +use musli::{Decode, Encode}; +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum HydrusError { + #[error("failed to connect to Hydrus")] + NetworkError(ureq::Error), + #[error("failed to deserialize data")] + DeserializeError(musli::Error), +} + +impl Into + +#[derive(Decode, Encode, PartialEq, Debug)] +#[repr(u8)] +pub enum HydrusPermissions { + ImportAndEditURLs = 0, + ImportAndEditFiles, + EditFileTags, + SearchAndFetchFiles, + ManagePages, + ManageCookiesAndHeaders, + ManageDatabase, + EditFileNotes, + EditFileRelationships, + EditFileRatings, + ManagePopups, + EditFileTimes, + CommitPending, + SeeLocalPaths, +} + +#[derive(Decode)] +struct AccessKey { + access_key: String, +} + +#[derive(Decode)] +struct SessionKey { + session_key: String, +} + +#[derive(Decode)] +pub struct KeyInfo { + name: String, + permits_everything: bool, + basic_permissions: Vec<HydrusPermissions>, + human_permissions: String, +} + +#[derive(Decode, Encode, PartialEq, Debug)] +#[repr(u8)] +pub enum ServiceType { + TagRepository = 0, + FileRepository, + LocalFileDomain, + LocalTagDomain = 5, + NumericalRating, + BoolRating, + AllKnownTags = 10, + AllKnownFiles, + LocalBooru, + IPFS, + Trash, + AllLocalFiles, + FileNotes = 17, + ClientAPI, + DeletedFromAnywhere, + LocalUpdates, + AllMyFiles, + IncDecRating, + ServerAdmin = 99, +} + +#[derive(Decode)] +pub struct Service { + name: String, + #[musli(default)] + service_key: String, + servicetype: ServiceType, + type_pretty: String, +} |
