waddling_sequences/
input_validation.rs

1//! Input/Data Validation sequences (001-010)
2//!
3//! These sequences cover errors related to data validation, format checking,
4//! and input processing according to WDP-6 conventions.
5//!
6//! **Reference:** WDP Part 6: Sequence Conventions (WDP-6) ยง4.1
7
8/// **001** - MISSING
9///
10/// Required data not provided.
11///
12/// **WDP-6:** Required data not provided | Parameter missing, field empty, resource not supplied
13///
14/// # Common Uses
15/// - Missing required parameter
16/// - Missing configuration value
17/// - Missing required field
18/// - Missing file or resource
19///
20/// # Examples
21/// ```rust
22/// use waddling_sequences::input_validation::MISSING;
23///
24/// const ERR_MISSING_PARAM: u16 = MISSING;
25/// // "Parameter 'username' is required but missing"
26/// ```
27pub const MISSING: u16 = 1;
28
29/// **002** - MISMATCH
30///
31/// Type or length mismatch.
32///
33/// **WDP-6:** Type or length mismatch | Type error, size mismatch, format disagreement
34///
35/// # Common Uses
36/// - Type mismatch
37/// - Length mismatch
38/// - Format mismatch
39/// - Checksum mismatch
40///
41/// # Examples
42/// ```rust
43/// use waddling_sequences::input_validation::MISMATCH;
44///
45/// const ERR_TYPE_MISMATCH: u16 = MISMATCH;
46/// // "Expected type 'String', found 'Integer'"
47/// ```
48pub const MISMATCH: u16 = 2;
49
50/// **003** - INVALID
51///
52/// Validation check failed.
53///
54/// **WDP-6:** Validation check failed | Format invalid, checksum failed, constraint violated
55///
56/// # Common Uses
57/// - Invalid syntax
58/// - Invalid format
59/// - Validation failure
60/// - Regex doesn't match
61///
62/// # Examples
63/// ```rust
64/// use waddling_sequences::input_validation::INVALID;
65///
66/// const ERR_INVALID_EMAIL: u16 = INVALID;
67/// // "Email format is invalid"
68/// ```
69pub const INVALID: u16 = 3;
70
71/// **004** - OVERFLOW
72///
73/// Value too large.
74///
75/// **WDP-6:** Value too large | Buffer overflow, numeric overflow, size exceeded
76///
77/// # Common Uses
78/// - Integer overflow
79/// - Buffer overflow
80/// - Capacity exceeded
81/// - Too many items
82///
83/// # Examples
84/// ```rust
85/// use waddling_sequences::input_validation::OVERFLOW;
86///
87/// const ERR_BUFFER_OVERFLOW: u16 = OVERFLOW;
88/// // "Buffer capacity exceeded: max 1024 bytes"
89/// ```
90pub const OVERFLOW: u16 = 4;
91
92/// **005** - UNDERFLOW
93///
94/// Value too small.
95///
96/// **WDP-6:** Value too small | Buffer underflow, numeric underflow, below minimum
97///
98/// # Common Uses
99/// - Integer underflow
100/// - Minimum not met
101/// - Too few items
102/// - Below threshold
103///
104/// # Examples
105/// ```rust
106/// use waddling_sequences::input_validation::UNDERFLOW;
107///
108/// const ERR_MIN_LENGTH: u16 = UNDERFLOW;
109/// // "Password must be at least 8 characters"
110/// ```
111pub const UNDERFLOW: u16 = 5;
112
113/// **006** - OUT_OF_BOUNDS
114///
115/// Outside valid range.
116///
117/// **WDP-6:** Outside valid range | Index out of bounds, value outside range
118///
119/// # Common Uses
120/// - Array index out of bounds
121/// - Value not in valid range
122/// - Outside acceptable limits
123///
124/// # Examples
125/// ```rust
126/// use waddling_sequences::input_validation::OUT_OF_BOUNDS;
127///
128/// const ERR_INDEX_OOB: u16 = OUT_OF_BOUNDS;
129/// // "Index 42 out of bounds (length: 10)"
130/// ```
131pub const OUT_OF_BOUNDS: u16 = 6;
132
133/// **007** - DUPLICATE
134///
135/// Duplicate entry.
136///
137/// **WDP-6:** Duplicate entry | Unique constraint violation, duplicate key
138///
139/// # Common Uses
140/// - Rate limit exceeded
141/// - Duplicate key/entry
142/// - Deduplication needed
143/// - Too many requests
144///
145/// # Examples
146/// ```rust
147/// use waddling_sequences::input_validation::DUPLICATE;
148///
149/// const BLOCKED_RATELIMIT: u16 = DUPLICATE;
150/// // "Rate limit exceeded: 100 requests per minute"
151/// ```
152pub const DUPLICATE: u16 = 7;
153
154/// **008** - DENIED
155///
156/// Permission denied.
157///
158/// **WDP-6:** Permission denied | Authorization failed, access forbidden
159///
160/// # Common Uses
161/// - Permission denied
162/// - Access denied
163/// - Authentication failed
164/// - Authorization failed
165///
166/// # Examples
167/// ```rust
168/// use waddling_sequences::input_validation::DENIED;
169///
170/// const ERR_ACCESS_DENIED: u16 = DENIED;
171/// // "Access denied: insufficient permissions"
172/// ```
173pub const DENIED: u16 = 8;
174
175/// **009** - UNSUPPORTED
176///
177/// Feature not supported.
178///
179/// **WDP-6:** Feature not supported | Unsupported operation, not implemented
180///
181/// # Common Uses
182/// - Feature not implemented
183/// - Platform not supported
184/// - Version not supported
185/// - Operation not allowed
186///
187/// # Examples
188/// ```rust
189/// use waddling_sequences::input_validation::UNSUPPORTED;
190///
191/// const ERR_UNSUPPORTED_OS: u16 = UNSUPPORTED;
192/// // "Operation not supported on Windows"
193/// ```
194pub const UNSUPPORTED: u16 = 9;
195
196/// **010** - DEPRECATED
197///
198/// Feature deprecated.
199///
200/// **WDP-6:** Feature deprecated | Deprecated API, obsolete feature (warning)
201///
202/// # Common Uses
203/// - Deprecated API
204/// - Deprecated syntax
205/// - Legacy feature
206/// - Scheduled for removal
207///
208/// # Examples
209/// ```rust
210/// use waddling_sequences::input_validation::DEPRECATED;
211///
212/// const WARN_DEPRECATED_API: u16 = DEPRECATED;
213/// // "Function 'old_api()' is deprecated, use 'new_api()' instead"
214/// ```
215pub const DEPRECATED: u16 = 10;
216
217#[cfg(test)]
218mod tests {
219    use super::*;
220
221    #[test]
222    fn test_sequence_values() {
223        assert_eq!(MISSING, 1);
224        assert_eq!(MISMATCH, 2);
225        assert_eq!(INVALID, 3);
226        assert_eq!(OVERFLOW, 4);
227        assert_eq!(UNDERFLOW, 5);
228        assert_eq!(OUT_OF_BOUNDS, 6);
229        assert_eq!(DUPLICATE, 7);
230        assert_eq!(DENIED, 8);
231        assert_eq!(UNSUPPORTED, 9);
232        assert_eq!(DEPRECATED, 10);
233    }
234
235    #[test]
236    fn test_sequences_in_range() {
237        let sequences = [
238            MISSING,
239            MISMATCH,
240            INVALID,
241            OVERFLOW,
242            UNDERFLOW,
243            OUT_OF_BOUNDS,
244            DUPLICATE,
245            DENIED,
246            UNSUPPORTED,
247            DEPRECATED,
248        ];
249
250        for &seq in &sequences {
251            assert!(
252                (1..=10).contains(&seq),
253                "Input/Data Validation sequences must be in range 001-010"
254            );
255        }
256    }
257
258    #[test]
259    fn test_sequences_are_unique() {
260        let sequences = [
261            MISSING,
262            MISMATCH,
263            INVALID,
264            OVERFLOW,
265            UNDERFLOW,
266            OUT_OF_BOUNDS,
267            DUPLICATE,
268            DENIED,
269            UNSUPPORTED,
270            DEPRECATED,
271        ];
272
273        for (i, &seq1) in sequences.iter().enumerate() {
274            for &seq2 in sequences.iter().skip(i + 1) {
275                assert_ne!(seq1, seq2, "Sequences must be unique");
276            }
277        }
278    }
279}