mirror of
https://github.com/aramperes/nut-rs.git
synced 2025-09-08 21:18:31 -04:00
parent
c56be76906
commit
11f70642dd
6 changed files with 34 additions and 8 deletions
|
@ -43,5 +43,6 @@ async fn main() -> nut_client::Result<()> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
// Gracefully shut down the connection using the `LOGOUT` command
|
||||||
|
conn.close().await
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
use std::convert::TryInto;
|
||||||
use std::env;
|
use std::env;
|
||||||
|
|
||||||
use nut_client::blocking::Connection;
|
use nut_client::blocking::Connection;
|
||||||
use nut_client::{Auth, ConfigBuilder};
|
use nut_client::{Auth, ConfigBuilder};
|
||||||
use std::convert::TryInto;
|
|
||||||
|
|
||||||
fn main() -> nut_client::Result<()> {
|
fn main() -> nut_client::Result<()> {
|
||||||
let host = env::var("NUT_HOST").unwrap_or_else(|_| "localhost".into());
|
let host = env::var("NUT_HOST").unwrap_or_else(|_| "localhost".into());
|
||||||
|
@ -42,5 +42,6 @@ fn main() -> nut_client::Result<()> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
// Gracefully shut down the connection using the `LOGOUT` command
|
||||||
|
conn.close()
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,12 @@ impl Connection {
|
||||||
Ok(conn)
|
Ok(conn)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Gracefully closes the connection.
|
||||||
|
pub fn close(mut self) -> crate::Result<()> {
|
||||||
|
self.logout()?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
/// Sends username and password, as applicable.
|
/// Sends username and password, as applicable.
|
||||||
fn login(&mut self, config: &Config) -> crate::Result<()> {
|
fn login(&mut self, config: &Config) -> crate::Result<()> {
|
||||||
if let Some(auth) = config.auth.clone() {
|
if let Some(auth) = config.auth.clone() {
|
||||||
|
|
|
@ -15,8 +15,10 @@ pub enum Command<'a> {
|
||||||
StartTLS,
|
StartTLS,
|
||||||
/// Queries the network version.
|
/// Queries the network version.
|
||||||
NetworkVersion,
|
NetworkVersion,
|
||||||
/// Queries the server version
|
/// Queries the server version.
|
||||||
Version,
|
Version,
|
||||||
|
/// Gracefully shuts down the connection.
|
||||||
|
Logout,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Command<'a> {
|
impl<'a> Command<'a> {
|
||||||
|
@ -30,6 +32,7 @@ impl<'a> Command<'a> {
|
||||||
Self::StartTLS => "STARTTLS",
|
Self::StartTLS => "STARTTLS",
|
||||||
Self::NetworkVersion => "NETVER",
|
Self::NetworkVersion => "NETVER",
|
||||||
Self::Version => "VER",
|
Self::Version => "VER",
|
||||||
|
Self::Logout => "LOGOUT",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -503,4 +506,9 @@ implement_action_commands! {
|
||||||
pub(crate) fn set_password(password: &str) {
|
pub(crate) fn set_password(password: &str) {
|
||||||
Command::SetPassword(password)
|
Command::SetPassword(password)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Gracefully shuts down the connection.
|
||||||
|
pub(crate) fn logout() {
|
||||||
|
Command::Logout
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,12 @@ impl Connection {
|
||||||
Ok(conn)
|
Ok(conn)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Gracefully closes the connection.
|
||||||
|
pub async fn close(mut self) -> crate::Result<()> {
|
||||||
|
self.logout().await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
/// Sends username and password, as applicable.
|
/// Sends username and password, as applicable.
|
||||||
async fn login(&mut self, config: &Config) -> crate::Result<()> {
|
async fn login(&mut self, config: &Config) -> crate::Result<()> {
|
||||||
if let Some(auth) = config.auth.clone() {
|
if let Some(auth) = config.auth.clone() {
|
||||||
|
|
|
@ -15,7 +15,7 @@ pub fn list_devices(config: Config, with_description: bool) -> anyhow::Result<()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
logout(conn)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn print_variable(config: Config, ups_name: &str, variable: &str) -> anyhow::Result<()> {
|
pub fn print_variable(config: Config, ups_name: &str, variable: &str) -> anyhow::Result<()> {
|
||||||
|
@ -24,7 +24,7 @@ pub fn print_variable(config: Config, ups_name: &str, variable: &str) -> anyhow:
|
||||||
let variable = conn.get_var(ups_name, variable)?;
|
let variable = conn.get_var(ups_name, variable)?;
|
||||||
println!("{}", variable.value());
|
println!("{}", variable.value());
|
||||||
|
|
||||||
Ok(())
|
logout(conn)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn list_variables(config: Config, ups_name: &str) -> anyhow::Result<()> {
|
pub fn list_variables(config: Config, ups_name: &str) -> anyhow::Result<()> {
|
||||||
|
@ -34,7 +34,7 @@ pub fn list_variables(config: Config, ups_name: &str) -> anyhow::Result<()> {
|
||||||
println!("{}", var);
|
println!("{}", var);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
logout(conn)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn list_clients(config: Config, ups_name: &str) -> anyhow::Result<()> {
|
pub fn list_clients(config: Config, ups_name: &str) -> anyhow::Result<()> {
|
||||||
|
@ -44,9 +44,13 @@ pub fn list_clients(config: Config, ups_name: &str) -> anyhow::Result<()> {
|
||||||
println!("{}", client_ip);
|
println!("{}", client_ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
logout(conn)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn connect(config: Config) -> anyhow::Result<Connection> {
|
fn connect(config: Config) -> anyhow::Result<Connection> {
|
||||||
Connection::new(&config).with_context(|| format!("Failed to connect to upsd: {:?}", &config))
|
Connection::new(&config).with_context(|| format!("Failed to connect to upsd: {:?}", &config))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn logout(conn: Connection) -> anyhow::Result<()> {
|
||||||
|
conn.close().with_context(|| "Failed to close gracefully")
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue