summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client.rs95
-rw-r--r--src/lib.rs9
-rw-r--r--src/types.rs82
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)
}
diff --git a/src/lib.rs b/src/lib.rs
index 50e4c25..a377da0 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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,
+}