From fe4f1d1ae9febbf03d84aed4b491f5b6ee3cc082 Mon Sep 17 00:00:00 2001
From: Gabriel Arazas <foodogsquared@foodogsquared.one>
Date: Sat, 24 Feb 2024 21:34:03 +0800
Subject: [PATCH] bahaghari/lib: init `isHexString`

---
 subprojects/bahaghari/lib/default.nix   |  2 +-
 subprojects/bahaghari/lib/hex.nix       | 17 +++++++++++++++++
 subprojects/bahaghari/tests/lib/hex.nix | 10 ++++++++++
 3 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/subprojects/bahaghari/lib/default.nix b/subprojects/bahaghari/lib/default.nix
index 88fa343d..ae0f4458 100644
--- a/subprojects/bahaghari/lib/default.nix
+++ b/subprojects/bahaghari/lib/default.nix
@@ -21,5 +21,5 @@ pkgs.lib.makeExtensible
       tinted-theming = callLibs ./tinted-theming.nix;
 
       inherit (self.trivial) importYAML toYAML toBaseDigitsWithGlyphs generateGlyphSet;
-      inherit (self.hex) toHexString;
+      inherit (self.hex) toHexString isHexString;
     })
diff --git a/subprojects/bahaghari/lib/hex.nix b/subprojects/bahaghari/lib/hex.nix
index 499b4883..8a6b071b 100644
--- a/subprojects/bahaghari/lib/hex.nix
+++ b/subprojects/bahaghari/lib/hex.nix
@@ -14,4 +14,21 @@ rec {
       range 15 18 => [ "F" "10" "11" ]
   */
   range = first: last: builtins.map (n: toHexString n) (pkgs.lib.lists.range first last);
+
+  /* Checks if the given hex string is valid or not.
+
+     Type: isHexString :: String -> Bool
+
+     Example:
+       isHexString "ABC"
+       => true
+
+       isHexString "00ABC"
+       => true
+
+       isHexString "WHAT! HELL NO!"
+       => false
+  */
+  isHexString = hex:
+    builtins.match "[A-Fa-f0-9]+" hex != null;
 }
diff --git a/subprojects/bahaghari/tests/lib/hex.nix b/subprojects/bahaghari/tests/lib/hex.nix
index fe8d2d8a..30300471 100644
--- a/subprojects/bahaghari/tests/lib/hex.nix
+++ b/subprojects/bahaghari/tests/lib/hex.nix
@@ -27,4 +27,14 @@ pkgs.lib.runTests {
     expr = lib.hex.range 49 17;
     expected = [ ];
   };
+
+  testIsHexString = {
+    expr = lib.hex.isHexString "ABC";
+    expected = true;
+  };
+
+  testIsHexStringWithInvalidHex = {
+    expr = lib.hex.isHexString "WHAT IS THIS";
+    expected = false;
+  };
 }