From a654057807593971e9b2ae12ba371549a1c8f3a0 Mon Sep 17 00:00:00 2001
From: Adrian Tombu <adrian@ystorian.com>
Date: Wed, 10 Jul 2024 12:25:08 +0000
Subject: [PATCH] Move to a lowercase alphabet

Signed-off-by: Adrian Tombu <adrian@ystorian.com>
---
 src/base32.rs | 53 ++++++++++++++++++++++++++++++---------------------
 src/lib.rs    | 40 +++++++++++++++++++-------------------
 src/uuid.rs   |  2 +-
 3 files changed, 52 insertions(+), 43 deletions(-)

diff --git a/src/base32.rs b/src/base32.rs
index d759e00..c65646e 100644
--- a/src/base32.rs
+++ b/src/base32.rs
@@ -3,23 +3,23 @@ use core::fmt;
 /// Length of a string-encoded Ulys
 pub const ULYS_LEN: usize = 26;
 
-const ALPHABET: &[u8; 32] = b"0123456789ABCDEFGHJKMNPQRSTVWXYZ";
+const ALPHABET: &[u8; 32] = b"0123456789abcdefghjkmnpqrstvwxyz";
 
 const NO_VALUE: u8 = 255;
 const LOOKUP: [u8; 256] = [
     255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
     255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
     255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 255, 255, 255,
-    255, 255, 255, 255, 10, 11, 12, 13, 14, 15, 16, 17, 255, 18, 19, 255, 20, 21, 255, 22, 23, 24,
-    25, 26, 255, 27, 28, 29, 30, 31, 255, 255, 255, 255, 255, 255, 10, 11, 12, 13, 14, 15, 16, 17,
-    255, 18, 19, 255, 20, 21, 255, 22, 23, 24, 25, 26, 255, 27, 28, 29, 30, 31, 255, 255, 255, 255,
     255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+    255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 10, 11,
+    12, 13, 14, 15, 16, 17, 255, 18, 19, 255, 20, 21, 255, 22, 23, 24, 25, 26, 255, 27, 28, 29, 30,
+    31, 255, 255, 255, 255, 255, 255, 10, 11, 12, 13, 14, 15, 16, 17, 255, 18, 19, 255, 20, 21,
+    255, 22, 23, 24, 25, 26, 255, 27, 28, 29, 30, 31, 255, 255, 255, 255, 255, 255, 255, 255, 255,
     255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
     255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
     255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
     255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-    255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-    255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+    255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
 ];
 
 /// Generator code for `LOOKUP`
@@ -148,12 +148,12 @@ mod tests {
 
     #[test]
     fn test_valid() {
-        let val = 0x41414141414141414141414141414141;
-        assert_eq!(decode("21850M2GA1850M2GA1850M2GA1").unwrap(), val);
-        assert_eq!(encode(val), "21850M2GA1850M2GA1850M2GA1");
+        let val = 0x4141_4141_4141_4141_4141_4141_4141_4141;
+        assert_eq!(decode("21850m2ga1850m2ga1850m2ga1").unwrap(), val);
+        assert_eq!(encode(val), "21850m2ga1850m2ga1850m2ga1");
 
-        let val = 0x4d4e385051444a59454234335a413756;
-        let enc = "2D9RW50MA499CMAGHM6DD42DTP";
+        let val = 0x4d4e_3850_5144_4a59_4542_3433_5a41_3756;
+        let enc = "2d9rw50ma499cmaghm6dd42dtp";
         let lower = enc.to_lowercase();
         assert_eq!(encode(val), enc);
         assert_eq!(decode(enc).unwrap(), val);
@@ -162,43 +162,52 @@ mod tests {
 
     #[test]
     fn test_length() {
-        assert_eq!(encode(0xffffffffffffffffffffffffffffffff).len(), ULYS_LEN);
-        assert_eq!(encode(0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f).len(), ULYS_LEN);
-        assert_eq!(encode(0x00000000000000000000000000000000).len(), ULYS_LEN);
+        assert_eq!(
+            encode(0xffff_ffff_ffff_ffff_ffff_ffff_ffff_ffff).len(),
+            ULYS_LEN
+        );
+        assert_eq!(
+            encode(0x0f0f_0f0f_0f0f_0f0f_0f0f_0f0f_0f0f_0f0f).len(),
+            ULYS_LEN
+        );
+        assert_eq!(
+            encode(0x0000_0000_0000_0000_0000_0000_0000_0000).len(),
+            ULYS_LEN
+        );
 
         assert_eq!(decode(""), Err(DecodeError::InvalidLength));
         assert_eq!(
-            decode("2D9RW50MA499CMAGHM6DD42DT"),
+            decode("2d9rw50ma499cmaghm6dd42dt"),
             Err(DecodeError::InvalidLength)
         );
         assert_eq!(
-            decode("2D9RW50MA499CMAGHM6DD42DTPP"),
+            decode("2d9rw50ma499cmaghm6dd42dtpP"),
             Err(DecodeError::InvalidLength)
         );
     }
 
     #[test]
     fn test_chars() {
-        for ref c in encode(0xffffffffffffffffffffffffffffffff).bytes() {
+        for ref c in encode(0xffff_ffff_ffff_ffff_ffff_ffff_ffff_ffff).bytes() {
             assert!(ALPHABET.contains(c));
         }
-        for ref c in encode(0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f).bytes() {
+        for ref c in encode(0x0f0f_0f0f_0f0f_0f0f_0f0f_0f0f_0f0f_0f0f).bytes() {
             assert!(ALPHABET.contains(c));
         }
-        for ref c in encode(0x00000000000000000000000000000000).bytes() {
+        for ref c in encode(0x0000_0000_0000_0000_0000_0000_0000_0000).bytes() {
             assert!(ALPHABET.contains(c));
         }
 
         assert_eq!(
-            decode("2D9RW50[A499CMAGHM6DD42DTP"),
+            decode("2d9rw50[a499cmaghm6dd42dtp"),
             Err(DecodeError::InvalidChar)
         );
         assert_eq!(
-            decode("2D9RW50LA499CMAGHM6DD42DTP"),
+            decode("2d9rw50la499cmaghm6dd42dtp"),
             Err(DecodeError::InvalidChar)
         );
         assert_eq!(
-            decode("2D9RW50IA499CMAGHM6DD42DTP"),
+            decode("2d9rw50ia499cmaghm6dd42dtp"),
             Err(DecodeError::InvalidChar)
         );
     }
diff --git a/src/lib.rs b/src/lib.rs
index e9cb1db..da20de6 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -90,7 +90,7 @@ impl Ulys {
     /// ```rust
     /// use ulys::Ulys;
     ///
-    /// let ulys = Ulys::from_string("01D39ZY06FGSCTVN4T2V9PKHFZ").unwrap();
+    /// let ulys = Ulys::from_string("01d39zy06fgsctvn4t2v9pkhfz").unwrap();
     ///
     /// let ulys2 = Ulys::from_parts(ulys.timestamp_ms(), ulys.random());
     ///
@@ -104,14 +104,14 @@ impl Ulys {
 
     /// Creates a Ulys from a Crockford Base32 encoded string
     ///
-    /// An DecodeError will be returned when the given string is not formatted
+    /// An `DecodeError` will be returned when the given string is not formatted
     /// properly.
     ///
     /// # Example
     /// ```rust
     /// use ulys::Ulys;
     ///
-    /// let text = "01D39ZY06FGSCTVN4T2V9PKHFZ";
+    /// let text = "01d39zy06fgsctvn4t2v9pkhfz";
     /// let result = Ulys::from_string(text);
     ///
     /// assert!(result.is_ok());
@@ -168,7 +168,7 @@ impl Ulys {
     /// ```rust
     /// use ulys::Ulys;
     ///
-    /// let text = "01D39ZY06FGSCTVN4T2V9PKHFZ";
+    /// let text = "01d39zy06fgsctvn4t2v9pkhfz";
     /// let ulys = Ulys::from_string(text).unwrap();
     /// let ulys_next = ulys.increment().unwrap();
     ///
@@ -184,11 +184,11 @@ impl Ulys {
     /// ```rust
     /// use ulys::Ulys;
     ///
-    /// let text = "01D39ZY06FGSCTVN4T2V9PKHFZ";
+    /// let text = "01d39zy06fgsctvn4t2v9pkhfz";
     /// let ulys = Ulys::from_string(text).unwrap();
     ///
     /// let mut buf = [0; ulys::ULYS_LEN];
-    /// let new_text = ulys.to_str(&mut buf).unwrap();
+    /// let new_text = ulys.array_to_str(&mut buf);
     ///
     /// assert_eq!(new_text, text);
     /// ```
@@ -205,7 +205,7 @@ impl Ulys {
     /// ```rust
     /// use ulys::Ulys;
     ///
-    /// let text = "01D39ZY06FGSCTVN4T2V9PKHFZ";
+    /// let text = "01d39zy06fgsctvn4t2v9pkhfz";
     /// let ulys = Ulys::from_string(text).unwrap();
     ///
     /// let mut buf = [0; ulys::ULYS_LEN];
@@ -224,7 +224,7 @@ impl Ulys {
     /// ```rust
     /// use ulys::Ulys;
     ///
-    /// let text = "01D39ZY06FGSCTVN4T2V9PKHFZ";
+    /// let text = "01d39zy06fgsctvn4t2v9pkhfz";
     /// let ulys = Ulys::from_string(text).unwrap();
     ///
     /// assert_eq!(&ulys.to_string(), text);
@@ -276,7 +276,7 @@ impl Ulys {
     ///
     /// assert_eq!(
     ///     ulys.to_string(),
-    ///     "7ZZZZZZZZZZZZZZZZZZZZZZZZZ"
+    ///     "7zzzzzzzzzzzzzzzzzzzzzzzzz"
     /// );
     /// ```
     pub const fn from_bytes(bytes: [u8; 16]) -> Ulys {
@@ -289,7 +289,7 @@ impl Ulys {
     /// ```
     /// use ulys::Ulys;
     ///
-    /// let text = "7ZZZZZZZZZZZZZZZZZZZZZZZZZ";
+    /// let text = "7zzzzzzzzzzzzzzzzzzzzzzzzz";
     /// let ulys = Ulys::from_string(text).unwrap();
     ///
     /// assert_eq!(ulys.to_bytes(), [0xFF; 16]);
@@ -369,35 +369,35 @@ mod tests {
 
     #[test]
     fn test_static() {
-        let s = Ulys(0x41414141414141414141414141414141).to_string();
+        let s = Ulys(0x4141_4141_4141_4141_4141_4141_4141_4141).to_string();
         let u = Ulys::from_string(&s).unwrap();
-        assert_eq!(&s, "21850M2GA1850M2GA1850M2GA1");
-        assert_eq!(u.0, 0x41414141414141414141414141414141);
+        assert_eq!(&s, "21850m2ga1850m2ga1850m2ga1");
+        assert_eq!(u.0, 0x4141_4141_4141_4141_4141_4141_4141_4141);
     }
 
     #[test]
     fn test_increment() {
-        let ulys = Ulys::from_string("01BX5ZZKBKAZZZZZZZZZZZZZZZ").unwrap();
+        let ulys = Ulys::from_string("01bx5zzkbkazzzzzzzzzzzzzzz").unwrap();
         let ulys = ulys.increment().unwrap();
-        assert_eq!("01BX5ZZKBKB000000000000000", ulys.to_string());
+        assert_eq!("01bx5zzkbkb000000000000000", ulys.to_string());
 
-        let ulys = Ulys::from_string("01BX5ZZKBKZZZZZZZZZZZZZZZX").unwrap();
+        let ulys = Ulys::from_string("01bx5zzkbkzzzzzzzzzzzzzzzx").unwrap();
         let ulys = ulys.increment().unwrap();
-        assert_eq!("01BX5ZZKBKZZZZZZZZZZZZZZZY", ulys.to_string());
+        assert_eq!("01bx5zzkbkzzzzzzzzzzzzzzzy", ulys.to_string());
         let ulys = ulys.increment().unwrap();
-        assert_eq!("01BX5ZZKBKZZZZZZZZZZZZZZZZ", ulys.to_string());
+        assert_eq!("01bx5zzkbkzzzzzzzzzzzzzzzz", ulys.to_string());
         assert!(ulys.increment().is_none());
     }
 
     #[test]
     fn test_increment_overflow() {
-        let ulys = Ulys(u128::max_value());
+        let ulys = Ulys(u128::MAX);
         assert!(ulys.increment().is_none());
     }
 
     #[test]
     fn can_into_thing() {
-        let ulys = Ulys::from_str("01FKMG6GAG0PJANMWFN84TNXCD").unwrap();
+        let ulys = Ulys::from_str("01fkmg6gag0pjanmwfn84tnxcd").unwrap();
         let s: String = ulys.into();
         let u: u128 = ulys.into();
         let uu: (u64, u64) = ulys.into();
diff --git a/src/uuid.rs b/src/uuid.rs
index 4ef71df..039c98e 100644
--- a/src/uuid.rs
+++ b/src/uuid.rs
@@ -31,7 +31,7 @@ mod test {
     #[test]
     fn uuid_str_cycle() {
         let uuid_txt = "771a3bce-02e9-4428-a68e-b1e7e82b7f9f";
-        let ulys_txt = "3Q38XWW0Q98GMAD3NHWZM2PZWZ";
+        let ulys_txt = "3q38xww0q98gmad3nhwzm2pzwz";
 
         let ulys: Ulys = Uuid::parse_str(uuid_txt).unwrap().into();
         assert_eq!(ulys.to_string(), ulys_txt);