hkid_ops/lib.rs
1//! # `hkid_ops` Usage Examples
2//!
3//! This section demonstrates common usage patterns for the `hkid_ops` library, including symbol and prefix parsing, HKID generation, and validation.
4//!
5//! ---
6//!
7//! ## 1. HKID Symbol Parsing
8//!
9//! ```ignore
10//! use hkid_ops::HKIDSymbol;
11//!
12//! let symbols = [
13//! "***", "*", "A", "B", "C", "N", "O", "R", "U", "W", "X", "Y", "Z", "H1", "L2", "Unknown"
14//! ];
15//! for (i, sym) in symbols.iter().enumerate() {
16//! let parsed = HKIDSymbol::parse(sym);
17//! println!("[{}] Input: {:?} => Parsed: {:?}", i + 1, sym, parsed);
18//! }
19//! ```
20//!
21//! ## 2. HKID Prefix Parsing
22//!
23//! ```ignore
24//! use hkid_ops::HKIDPrefix;
25//!
26//! let prefixes = [
27//! "A", "C", "F", "K", "N", "R", "Z", "EC", "WX", "XA", "Unknown"
28//! ];
29//! for (i, prefix) in prefixes.iter().enumerate() {
30//! let parsed = HKIDPrefix::parse(prefix);
31//! println!("[{}] Input: {:?} => Parsed: {:?}", i + 1, prefix, parsed);
32//! }
33//! ```
34//!
35//! ## 3. HKID Generation and Validation (Known Prefixes)
36//!
37//! ```ignore
38//! use hkid_ops::{hkid_generator, validate_hkid};
39//!
40//! let gen_prefixes = ["A", "K", "WX", "XA"];
41//! for (i, prefix) in gen_prefixes.iter().enumerate() {
42//! println!("\n[{}] Generating HKID with prefix '{}':", i + 1, prefix);
43//! match hkid_generator::generate_hkid(Some(prefix), true) {
44//! Ok(hkid) => {
45//! println!("Generated: {}", hkid);
46//! // Validate the generated HKID
47//! match validate_hkid(&hkid, true) {
48//! Ok(valid) => println!(" Validation result: {}", if valid { "Valid" } else { "Invalid" }),
49//! Err(e) => println!(" Validation error: {}", e),
50//! }
51//! }
52//! Err(e) => println!("Error: {}", e),
53//! }
54//! }
55//! ```
56//!
57//! ## 4. HKID Generation Allowing Unknown Prefixes
58//!
59//! ```ignore
60//! use hkid_ops::hkid_generator;
61//!
62//! let test_prefixes = ["A", "WX", "ZZ"];
63//! for prefix in test_prefixes {
64//! println!("\nGenerating HKID with prefix '{}', must_exist_in_enum = true:", prefix);
65//! match hkid_generator::generate_hkid(Some(prefix), true) {
66//! Ok(hkid) => println!(" Generated: {}", hkid),
67//! Err(e) => println!(" Error: {}", e),
68//! }
69//! println!("Generating HKID with prefix '{}', must_exist_in_enum = false:", prefix);
70//! match hkid_generator::generate_hkid(Some(prefix), false) {
71//! Ok(hkid) => println!(" Generated (allowed unknown): {}", hkid),
72//! Err(e) => println!(" Error: {}", e),
73//! }
74//! }
75//! ```
76//!
77//! ## 5. HKID Generation Using a Random Prefix
78//!
79//! ```ignore
80//! use hkid_ops::{hkid_generator, validate_hkid};
81//!
82//! // Random known prefix
83//! println!("Generating HKID with random prefix (must_exist_in_enum = true):");
84//! match hkid_generator::generate_hkid(None, true) {
85//! Ok(hkid) => {
86//! println!(" Generated: {}", hkid);
87//! match validate_hkid(&hkid, true) {
88//! Ok(valid) => println!(" Validation result: {}", if valid { "Valid" } else { "Invalid" }),
89//! Err(e) => println!(" Validation error: {}", e),
90//! }
91//! }
92//! Err(e) => println!(" Error: {}", e),
93//! }
94//!
95//! // Random unknown-or-known prefix
96//! println!("Generating HKID with random prefix (must_exist_in_enum = false):");
97//! match hkid_generator::generate_hkid(None, false) {
98//! Ok(hkid) => {
99//! println!(" Generated: {}", hkid);
100//! match validate_hkid(&hkid, false) {
101//! Ok(valid) => println!(" Validation result: {}", if valid { "Valid" } else { "Invalid" }),
102//! Err(e) => println!(" Validation error: {}", e),
103//! }
104//! }
105//! Err(e) => println!(" Error: {}", e),
106//! }
107//! ```
108//!
109//! ## 6. HKID Validation (Various Samples)
110//!
111//! ```ignore
112//! use hkid_ops::validate_hkid;
113//!
114//! let samples = [
115//! ("A123456(7)", true), // Valid, known prefix, correct format
116//! ("AB123456(9)", true), // Valid, known prefix, correct format
117//! ("ZZ123456(9)", false), // Unknown prefix, but allowed
118//! ("A123456(8)", true), // Invalid check digit
119//! ("A12345(7)", true), // Invalid length
120//! ("A123456(7)", false), // Accept unknown prefix (should be fine)
121//! ("PB100001(8)", false), // Valid for unknown prefix
122//! ("PB100001(8)", true), // Unknown prefix, must_exist_in_enum
123//! ];
124//! for (i, (hkid, must_exist)) in samples.iter().enumerate() {
125//! println!("\n[{}] Validating HKID '{}', must_exist_in_enum = {}:", i + 1, hkid, must_exist);
126//! match validate_hkid(hkid, *must_exist) {
127//! Ok(valid) => println!("{}", if valid { "Valid" } else { "Invalid" }),
128//! Err(e) => println!("Error: {}", e),
129//! }
130//! }
131//! ```
132//!
133//! ---
134//!
135//! For more advanced or interactive usage, see the `examples/` directory of the repository.
136//!
137//! > These code snippets are for demonstration purposes; some require the crate to be used as a binary for visible output via `println!`.
138//!
139
140pub mod hkid_check_digit;
141pub mod hkid_generator;
142pub mod hkid_prefix;
143pub mod hkid_symbol;
144pub mod hkid_validator;
145
146const WEIGHTS: [u32; 8] = [9, 8, 7, 6, 5, 4, 3, 2];