1use std::env;
2
3use nut_client::tokio::Connection;
4use nut_client::{Auth, ConfigBuilder};
5use std::convert::TryInto;
6
7#[tokio::main]
8async fn main() -> nut_client::Result<()> {
9 let host = env::var("NUT_HOST").unwrap_or_else(|_| "localhost".into());
10 let port = env::var("NUT_PORT")
11 .ok()
12 .map(|s| s.parse::<u16>().ok())
13 .flatten()
14 .unwrap_or(3493);
15
16 let username = env::var("NUT_USER").ok();
17 let password = env::var("NUT_PASSWORD").ok();
18 let auth = username.map(|username| Auth::new(username, password));
19
20 let config = ConfigBuilder::new()
21 .with_host((host, port).try_into().unwrap_or_default())
22 .with_auth(auth)
23 .with_debug(false) .build();
25
26 let mut conn = Connection::new(&config).await?;
27
28 println!("NUT server:");
30 println!("\tVersion: {}", conn.get_server_version().await?);
31 println!("\tNetwork Version: {}", conn.get_network_version().await?);
32
33 println!("Connected UPS devices:");
35 for (name, description) in conn.list_ups().await? {
36 println!("\t- Name: {}", name);
37 println!("\t Description: {}", description);
38 println!(
39 "\t Number of logins: {}",
40 conn.get_num_logins(&name).await?
41 );
42
43 let mutable_vars = conn.list_mutable_vars(&name).await?;
45
46 println!("\t Mutable Variables:");
48 for var in mutable_vars.iter() {
49 println!("\t\t- {}", var);
50 println!("\t\t {:?}", conn.get_var_type(&name, var.name()).await?);
51 }
52
53 println!("\t Immutable Properties:");
55 for var in conn.list_vars(&name).await? {
56 if mutable_vars.iter().any(|v| v.name() == var.name()) {
57 continue;
58 }
59 println!("\t\t- {}", var);
60 println!("\t\t {:?}", conn.get_var_type(&name, var.name()).await?);
61 }
62
63 println!("\t Commands:");
65 for cmd in conn.list_commands(&name).await? {
66 let description = conn.get_command_description(&name, &cmd).await?;
67 println!("\t\t- {} ({})", cmd, description);
68 }
69 }
70
71 conn.close().await
73}