zkteco 1.0.0

A pure-Rust client for ZKTeco biometric attendance / access-control terminals (TCP/UDP protocol). A faithful port of the Python `pyzk` library.
Documentation
//! Create a user then delete it again.
//!
//! Run with: `cargo run --example set_delete_user -- 192.168.1.201 [port]`
//!
//! WARNING: this writes to the device. Use a test unit.

use std::time::Duration;
use zkteco::{User, Zk, USER_DEFAULT};

fn main() -> zkteco::ZkResult<()> {
    let mut args = std::env::args().skip(1);
    let ip = args.next().expect("usage: set_delete_user <ip> [port]");
    let port: u16 = args.next().and_then(|p| p.parse().ok()).unwrap_or(4370);

    let mut zk = Zk::builder(ip)
        .port(port)
        .timeout(Duration::from_secs(10))
        .omit_ping(true)
        .build();

    zk.connect()?;
    zk.disable_device()?;

    // Populate next_uid / next_user_id by reading current users first.
    let _ = zk.get_users()?;

    // uid = 0 asks the crate to assign the next free uid / user_id.
    let user = User::new(0, "Test User", USER_DEFAULT, "1234", "", "", 0);
    zk.set_user(&user)?;
    println!("created a user; uid counter now {}", zk.next_uid());

    // Delete by user_id (uid = 0 triggers a lookup).
    let created = zk.get_users()?;
    if let Some(last) = created.iter().max_by_key(|u| u.uid) {
        println!("deleting uid={} id={}", last.uid, last.user_id);
        zk.delete_user(last.uid, &last.user_id)?;
    }

    zk.enable_device()?;
    zk.disconnect()?;
    Ok(())
}