account_management/
account_management.rs1use dvrip_rs::{Authentication, Connection, DVRIPCam, UserManagement};
2use std::time::Duration;
3
4#[tokio::main]
5async fn main() -> Result<(), Box<dyn std::error::Error>> {
6 let args: Vec<String> = std::env::args().collect();
7 if args.len() < 4 {
8 println!("Usage: {} <IP> <Username> <Password>", args[0]);
9 return Ok(());
10 }
11
12 let ip = &args[1];
13 let user = &args[2];
14 let pass = &args[3];
15
16 let mut cam = DVRIPCam::new(ip);
17
18 cam.connect(Duration::from_secs(5)).await?;
19 cam.login(user, pass).await?;
20
21 println!("--- USER LIST ---");
22 match cam.get_users().await {
23 Ok(users) => {
24 for user in users {
25 let name = user
26 .get("Name")
27 .and_then(|n| n.as_str())
28 .unwrap_or("Unknown");
29 let group = user.get("Group").and_then(|g| g.as_str()).unwrap_or("None");
30 println!(" - User: {} [Group: {}]", name, group);
31 }
32 }
33 Err(e) => eprintln!("Failed to get users: {}", e),
34 }
35
36 println!("\n--- GROUP LIST ---");
37 match cam.get_groups().await {
38 Ok(groups) => {
39 for group in groups {
40 let name = group
41 .get("Name")
42 .and_then(|n| n.as_str())
43 .unwrap_or("Unknown");
44 println!(" - Group: {}", name);
45 }
46 }
47 Err(e) => eprintln!("Failed to get groups: {}", e),
48 }
49
50 cam.close().await?;
51 Ok(())
52}