Skip to main content

set_delete_user/
set_delete_user.rs

1//! Create a user then delete it again.
2//!
3//! Run with: `cargo run --example set_delete_user -- 192.168.1.201 [port]`
4//!
5//! WARNING: this writes to the device. Use a test unit.
6
7use std::time::Duration;
8use zkteco::{User, Zk, USER_DEFAULT};
9
10fn main() -> zkteco::ZkResult<()> {
11    let mut args = std::env::args().skip(1);
12    let ip = args.next().expect("usage: set_delete_user <ip> [port]");
13    let port: u16 = args.next().and_then(|p| p.parse().ok()).unwrap_or(4370);
14
15    let mut zk = Zk::builder(ip)
16        .port(port)
17        .timeout(Duration::from_secs(10))
18        .omit_ping(true)
19        .build();
20
21    zk.connect()?;
22    zk.disable_device()?;
23
24    // Populate next_uid / next_user_id by reading current users first.
25    let _ = zk.get_users()?;
26
27    // uid = 0 asks the crate to assign the next free uid / user_id.
28    let user = User::new(0, "Test User", USER_DEFAULT, "1234", "", "", 0);
29    zk.set_user(&user)?;
30    println!("created a user; uid counter now {}", zk.next_uid());
31
32    // Delete by user_id (uid = 0 triggers a lookup).
33    let created = zk.get_users()?;
34    if let Some(last) = created.iter().max_by_key(|u| u.uid) {
35        println!("deleting uid={} id={}", last.uid, last.user_id);
36        zk.delete_user(last.uid, &last.user_id)?;
37    }
38
39    zk.enable_device()?;
40    zk.disconnect()?;
41    Ok(())
42}