1use std::env;
11use thaiidcard::{model, Options, SmartCard};
12
13fn main() {
14 let reader_name = env::args().nth(1);
15
16 match SmartCard::list_readers() {
17 Ok(readers) => {
18 println!("Found {} reader(s):", readers.len());
19 for (i, r) in readers.iter().enumerate() {
20 println!(" [{}] {}", i, r);
21 }
22 }
23 Err(e) => eprintln!("Failed to list readers: {}", e),
24 }
25
26 let opts = Options {
27 show_nhso_data: true,
28 ..Options::default()
29 };
30
31 let card = SmartCard::new();
32 println!("\nWaiting for card...");
33 match card.read(reader_name.as_deref(), &opts) {
34 Ok(data) => {
35 print_card_data(&data);
36 }
37 Err(e) => eprintln!("Read error: {}", e),
38 }
39}
40
41fn print_card_data(data: &model::CardData) {
42 if let Some(p) = &data.personal {
43 println!("\n=== Personal Information ===");
44 println!(" CID: {}", p.cid);
45 println!(" Name (TH): {}", p.name.full_name);
46 println!(" Name (EN): {}", p.name_en.full_name);
47 println!(" DOB: {}", p.dob);
48 println!(" Gender: {}", p.gender);
49 println!(" Card Issuer: {}", p.card_issuer);
50 println!(" Issue Date: {}", p.issue_date);
51 println!(" Expire Date: {}", p.expire_date);
52 println!(" Address: {}", p.address.full_address);
53 if !p.face_image.is_empty() {
54 println!(" Face Image: [{} bytes base64]", p.face_image.len());
55 }
56 }
57
58 if let Some(c) = &data.card {
59 if !c.laser_id.is_empty() {
60 println!("\n=== Card Info ===");
61 println!(" Laser ID: {}", c.laser_id);
62 }
63 }
64
65 if let Some(n) = &data.nhso {
66 if !n.main_inscl.is_empty() {
67 println!("\n=== NHSO Information ===");
68 println!(" Main Inscl: {}", n.main_inscl);
69 println!(" Sub Inscl: {}", n.sub_inscl);
70 println!(" Main Hosp: {}", n.main_hospital);
71 println!(" Sub Hosp: {}", n.sub_hospital);
72 println!(" Paid Type: {}", n.paid_type);
73 println!(" NHSO Issue: {}", n.issue_date);
74 println!(" NHSO Expire: {}", n.expire_date);
75 println!(" NHSO Update: {}", n.update_date);
76 println!(" Change Hosp: {}", n.change_hospital_amount);
77 }
78 }
79}