From 5f131322caba21e4c8c0e6f9905db7ed3049c315 Mon Sep 17 00:00:00 2001 From: red Date: Mon, 20 Apr 2020 15:32:54 +0200 Subject: [PATCH] refactored library, structurized types, added session-get example --- examples/get_session.rs | 21 +++++++++++++++++++++ src/lib.rs | 20 ++++++-------------- src/models/mod.rs | 4 ---- src/{models => types}/entity.rs | 7 +++++++ src/types/mod.rs | 13 +++++++++++++ src/{models => types}/request.rs | 0 src/{models => types}/response.rs | 0 7 files changed, 47 insertions(+), 18 deletions(-) create mode 100644 examples/get_session.rs delete mode 100644 src/models/mod.rs rename src/{models => types}/entity.rs (80%) create mode 100644 src/types/mod.rs rename src/{models => types}/request.rs (100%) rename src/{models => types}/response.rs (100%) diff --git a/examples/get_session.rs b/examples/get_session.rs new file mode 100644 index 0000000..6961bbb --- /dev/null +++ b/examples/get_session.rs @@ -0,0 +1,21 @@ +extern crate transmission_rpc; + +use std::env; +use dotenv::dotenv; +use transmission_rpc::TransClient; +use transmission_rpc::types::{Result, RpcResponse, SessionInfo, BasicAuth}; + +#[tokio::main] +async fn main() -> Result<()> { + dotenv().ok(); + env_logger::init(); + let url= env::var("TURL")?; + let basic_auth = BasicAuth{user: env::var("TUSER")?, password: env::var("TPWD")?}; + let client = TransClient::with_auth(&url, basic_auth); + let response: Result> = client.get_session().await; + match response { + Ok(_) => println!("Yay!"), + Err(_) => panic!("Oh no!") + } + Ok(()) +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 996bac1..5ba79b2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,20 +12,11 @@ extern crate tokio_postgres; use reqwest::header::CONTENT_TYPE; -pub type Result = std::result::Result>; +pub mod types; +use types::{Result, RpcResponse, SessionGet, SessionInfo}; +use types::BasicAuth; -#[derive(Debug)] -struct BasicAuth { - user: String, - password: String, -} - -mod models; -use models::request::SessionGet; -use models::response::RpcResponse; -use models::entity::SessionInfo; - -struct TransClient { +pub struct TransClient { url: String, auth: Option } @@ -73,6 +64,7 @@ impl TransClient { session_id } + pub async fn get_session(&self) -> Result> { info!("Loaded auth: {:?}", &self.auth); let rq: reqwest::RequestBuilder = self.rpc_request() @@ -110,7 +102,7 @@ mod tests { async fn it_works() -> Result<()> { dotenv().ok(); env_logger::init(); - let url= env::var("URL")?; + let url= env::var("TURL")?; let basic_auth = BasicAuth{user: env::var("TUSER")?, password: env::var("TPWD")?}; TransClient::with_auth(&url, basic_auth).get_session().await; Ok(()) diff --git a/src/models/mod.rs b/src/models/mod.rs deleted file mode 100644 index cc24545..0000000 --- a/src/models/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ - -pub mod request; -pub mod response; -pub mod entity; \ No newline at end of file diff --git a/src/models/entity.rs b/src/types/entity.rs similarity index 80% rename from src/models/entity.rs rename to src/types/entity.rs index a187bb8..e1341ca 100644 --- a/src/models/entity.rs +++ b/src/types/entity.rs @@ -1,4 +1,11 @@ use serde::Deserialize; + +#[derive(Debug)] +pub struct BasicAuth { + pub user: String, + pub password: String, +} + #[derive(Deserialize, Debug)] pub struct SessionInfo { #[serde(rename="blocklist-enabled")] diff --git a/src/types/mod.rs b/src/types/mod.rs new file mode 100644 index 0000000..fc046cb --- /dev/null +++ b/src/types/mod.rs @@ -0,0 +1,13 @@ + +mod request; +mod response; +mod entity; + +pub type Result = std::result::Result>; + +pub(crate) use self::request::SessionGet; + +pub use self::response::RpcResponse; + +pub use self::entity::BasicAuth; +pub use self::entity::SessionInfo; \ No newline at end of file diff --git a/src/models/request.rs b/src/types/request.rs similarity index 100% rename from src/models/request.rs rename to src/types/request.rs diff --git a/src/models/response.rs b/src/types/response.rs similarity index 100% rename from src/models/response.rs rename to src/types/response.rs