1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//! An uppercase sequence, unbounded by rendering output
//! ```rust
//! use letter_sequence::sequence::builder;
//! let mut seq = builder::SequenceBuilder::new(0)
//! 	.upper()
//! 	.build()
//! 	.unwrap();
//! assert_eq!( seq.to_string(), "A" );
//! seq.next();
//! assert_eq!( seq.to_string(), "B" );
//! seq.set(25).unwrap();
//! assert_eq!( seq.to_string(), "Z" );
//! seq.nth(3);
//! assert_eq!( seq.to_string(), "AD" );
//! ```
//!
//! This time with `.max_chars()` set, and `.lower()` cased
//! ```rust
//! use letter_sequence::sequence::builder;
//! let mut seq = builder::SequenceBuilder::new(24)
//! 	.lower()
//! 	.max_chars(1)
//! 	.build()
//! 	.unwrap();
//! assert_eq!( seq.to_string(),                 "y"  );
//! assert_eq!( seq.next().unwrap().to_string(), "z"  );
//! assert_eq!( seq.to_string(),                 "z"  );
//! assert_eq!( seq.next(),                      None );
//! ```
//! Also supports bounded and unbounded numeric sequences
//! ```rust
//! use letter_sequence::sequence::builder;
//! let mut seq = builder::SequenceBuilder::new(99)
//! 	.numeric()
//! 	.max_chars(3)
//! 	.build()
//! 	.unwrap();
//! assert_eq!( seq.to_string(),                 "99"  );
//! assert_eq!( seq.next().unwrap().to_string(), "100" );
//! ```

pub mod sequence;

#[derive(Debug, Eq, PartialEq)]
pub enum SequenceError {
	OutOfRange
}


const LETTERS: u64 = 25;
const A: u32  = 0;
const Z: u32 = 25;