Add session-close.

This commit is contained in:
Quang Ngô 2021-11-16 21:02:35 +07:00 committed by Aleksandr
parent d114bda4ca
commit 1e603ff839
7 changed files with 85 additions and 3 deletions

View File

@ -41,6 +41,13 @@ jobs:
args: --release --all-features args: --release --all-features
- name: Cargo Test - name: Cargo Test
uses: actions-rs/cargo@v1 uses: actions-rs/toolchain@v1
with: with:
command: test toolchain: stable
- run: cargo test -- --skip session_close
- name: Cargo Test Session Close
uses: actions-rs/toolchain@v1
with:
toolchain: stable
- run: cargo test -- session_close

View File

@ -31,7 +31,7 @@ spec: https://github.com/transmission/transmission/blob/master/extras/rpc-spec.t
- [X] session-stats - [X] session-stats
- [X] blocklist-update - [X] blocklist-update
- [X] port-test - [X] port-test
- [ ] session-close - [X] session-close
- [X] free-space - [X] free-space
Support the project: [![Donate button](https://www.paypalobjects.com/en_US/DK/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=H337RKJSC4YG4&source=url) Support the project: [![Donate button](https://www.paypalobjects.com/en_US/DK/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=H337RKJSC4YG4&source=url)

26
examples/session-close.rs Normal file
View File

@ -0,0 +1,26 @@
extern crate transmission_rpc;
use dotenv::dotenv;
use std::env;
use transmission_rpc::types::{BasicAuth, Result, RpcResponse, SessionClose};
use transmission_rpc::TransClient;
#[tokio::main]
async fn main() -> Result<()> {
dotenv().ok();
env_logger::init();
let url = env::var("TURL")?;
let client;
if let (Ok(user), Ok(password)) = (env::var("TUSER"), env::var("TPWD")) {
client = TransClient::with_auth(&url, BasicAuth {user, password});
} else {
client = TransClient::new(&url);
}
let response: Result<RpcResponse<SessionClose>> = client.session_close().await;
match response {
Ok(_) => println!("Yay!"),
Err(_) => panic!("Oh no!")
}
println!("Rpc response is ok: {}", response?.is_ok());
Ok(())
}

View File

@ -12,6 +12,7 @@ use types::BasicAuth;
use types::BlocklistUpdate; use types::BlocklistUpdate;
use types::SessionGet; use types::SessionGet;
use types::SessionStats; use types::SessionStats;
use types::SessionClose;
use types::PortTest; use types::PortTest;
use types::FreeSpace; use types::FreeSpace;
use types::TorrentAction; use types::TorrentAction;
@ -151,6 +152,42 @@ impl TransClient {
self.call(RpcRequest::session_stats()).await self.call(RpcRequest::session_stats()).await
} }
/// Performs a session close call
///
/// # Errors
///
/// Any IO Error or Deserialization error
///
/// # Example
///
/// ```
/// extern crate transmission_rpc;
///
/// use std::env;
/// use dotenv::dotenv;
/// use transmission_rpc::TransClient;
/// use transmission_rpc::types::{Result, RpcResponse, BasicAuth, SessionClose};
///
/// #[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<RpcResponse<SessionClose>> = client.session_close().await;
/// match response {
/// Ok(_) => println!("Yay!"),
/// Err(_) => panic!("Oh no!")
/// }
/// println!("Rpc response is ok: {}", response?.is_ok());
/// Ok(())
/// }
/// ```
pub async fn session_close(&self) -> Result<RpcResponse<SessionClose>> {
self.call(RpcRequest::session_close()).await
}
/// Performs a blocklist update call /// Performs a blocklist update call
/// ///
/// # Errors /// # Errors

View File

@ -22,6 +22,7 @@ pub use self::response::RpcResponse;
pub(crate) use self::response::RpcResponseArgument; pub(crate) use self::response::RpcResponseArgument;
pub use self::response::SessionGet; pub use self::response::SessionGet;
pub use self::response::SessionStats; pub use self::response::SessionStats;
pub use self::response::SessionClose;
pub use self::response::BlocklistUpdate; pub use self::response::BlocklistUpdate;
pub use self::response::PortTest; pub use self::response::PortTest;
pub use self::response::FreeSpace; pub use self::response::FreeSpace;

View File

@ -23,6 +23,13 @@ impl RpcRequest {
} }
} }
pub fn session_close() -> RpcRequest {
RpcRequest {
method: String::from("session-close"),
arguments: None,
}
}
pub fn blocklist_update() -> RpcRequest { pub fn blocklist_update() -> RpcRequest {
RpcRequest { RpcRequest {
method: String::from("blocklist-update"), method: String::from("blocklist-update"),

View File

@ -46,6 +46,10 @@ pub struct SessionStats {
} }
impl RpcResponseArgument for SessionStats {} impl RpcResponseArgument for SessionStats {}
#[derive(Deserialize, Debug, Clone)]
pub struct SessionClose {}
impl RpcResponseArgument for SessionClose {}
#[derive(Deserialize, Debug, Clone)] #[derive(Deserialize, Debug, Clone)]
pub struct BlocklistUpdate { pub struct BlocklistUpdate {
#[serde(rename = "blocklist-size")] #[serde(rename = "blocklist-size")]