about summary refs log tree commit diff
path: root/users/sterni/nix/string
diff options
context:
space:
mode:
Diffstat (limited to 'users/sterni/nix/string')
-rw-r--r--users/sterni/nix/string/default.nix4
-rw-r--r--users/sterni/nix/string/tests/default.nix12
2 files changed, 16 insertions, 0 deletions
diff --git a/users/sterni/nix/string/default.nix b/users/sterni/nix/string/default.nix
index 782f86b7f79b..e2b27571c73f 100644
--- a/users/sterni/nix/string/default.nix
+++ b/users/sterni/nix/string/default.nix
@@ -55,6 +55,9 @@ let
       then s
       else pad { inherit char; "${side}" = diff; } s;
 
+  # pattern matching for strings only
+  match = val: matcher: matcher."${val}";
+
 in {
   inherit
     take
@@ -67,5 +70,6 @@ in {
     fromChars
     pad
     fit
+    match
     ;
 }
diff --git a/users/sterni/nix/string/tests/default.nix b/users/sterni/nix/string/tests/default.nix
index 576952673471..2caecbfa7b3f 100644
--- a/users/sterni/nix/string/tests/default.nix
+++ b/users/sterni/nix/string/tests/default.nix
@@ -45,9 +45,21 @@ let
       null)
   ];
 
+  dontEval = builtins.throw "this should not get evaluated";
+
+  testMatch = it "tests match" [
+    (assertEq "basic match usage" 42
+      (string.match "answer" {
+        "answer" = 42;
+        "banana" = dontEval;
+        "maleur" = dontEval;
+      }))
+  ];
+
 in
   runTestsuite "nix.string" [
     testTakeDrop
     testIndexing
     testFinding
+    testMatch
   ]