mirror of
https://github.com/arampoire/nut-rs.git
synced 2025-11-30 16:20:25 -05:00
Add support for running commands
This commit is contained in:
parent
35d40d3111
commit
839ce6f119
2 changed files with 36 additions and 0 deletions
|
|
@ -26,6 +26,7 @@ default = []
|
||||||
ssl = ["rustls", "rustls/dangerous_configuration", "webpki", "webpki-roots"]
|
ssl = ["rustls", "rustls/dangerous_configuration", "webpki", "webpki-roots"]
|
||||||
async = ["tokio"]
|
async = ["tokio"]
|
||||||
async-ssl = ["async", "tokio-rustls", "ssl"]
|
async-ssl = ["async", "tokio-rustls", "ssl"]
|
||||||
|
write = []
|
||||||
# a feature gate for examples
|
# a feature gate for examples
|
||||||
async-rt = ["async", "tokio/rt-multi-thread", "tokio/macros"]
|
async-rt = ["async", "tokio/rt-multi-thread", "tokio/macros"]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,9 @@ pub enum Command<'a> {
|
||||||
NetworkVersion,
|
NetworkVersion,
|
||||||
/// Queries the server version.
|
/// Queries the server version.
|
||||||
Version,
|
Version,
|
||||||
|
#[cfg(feature = "write")]
|
||||||
|
/// Run a command. Allow for on additional optional param.
|
||||||
|
Run(&'a str, Option<&'a str>),
|
||||||
/// Gracefully shuts down the connection.
|
/// Gracefully shuts down the connection.
|
||||||
Logout,
|
Logout,
|
||||||
}
|
}
|
||||||
|
|
@ -33,6 +36,8 @@ impl<'a> Command<'a> {
|
||||||
Self::StartTLS => "STARTTLS",
|
Self::StartTLS => "STARTTLS",
|
||||||
Self::NetworkVersion => "NETVER",
|
Self::NetworkVersion => "NETVER",
|
||||||
Self::Version => "VER",
|
Self::Version => "VER",
|
||||||
|
#[cfg(feature = "write")]
|
||||||
|
Self::Run(_, _) => "INSTCMD",
|
||||||
Self::Logout => "LOGOUT",
|
Self::Logout => "LOGOUT",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -44,6 +49,8 @@ impl<'a> Command<'a> {
|
||||||
Self::SetUsername(username) => vec![username],
|
Self::SetUsername(username) => vec![username],
|
||||||
Self::SetPassword(password) => vec![password],
|
Self::SetPassword(password) => vec![password],
|
||||||
Self::List(query) => query.to_vec(),
|
Self::List(query) => query.to_vec(),
|
||||||
|
#[cfg(feature = "write")]
|
||||||
|
Self::Run(cmd, param) => vec![cmd, param.unwrap_or("")],
|
||||||
_ => Vec::new(),
|
_ => Vec::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -855,3 +862,31 @@ implement_action_commands! {
|
||||||
Command::Logout
|
Command::Logout
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "write")]
|
||||||
|
impl crate::blocking::Connection {
|
||||||
|
/// Runs a command on the UPS.
|
||||||
|
pub fn run_command(&mut self, cmd: &str, param: Option<&str>) -> crate::Result<()> {
|
||||||
|
match self {
|
||||||
|
Self::Tcp(conn) => {
|
||||||
|
conn.write_cmd(Command::Run(cmd, param))?;
|
||||||
|
conn.read_response()?.expect_ok()?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(all(feature = "write", feature = "async"))]
|
||||||
|
impl crate::tokio::Connection {
|
||||||
|
/// Runs a command on the UPS.
|
||||||
|
pub async fn run_command(&mut self, cmd: &str, param: Option<&str>) -> crate::Result<()> {
|
||||||
|
match self {
|
||||||
|
Self::Tcp(conn) => {
|
||||||
|
conn.write_cmd(Command::Run(cmd, param)).await?;
|
||||||
|
conn.read_response().await?.expect_ok()?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue