summaryrefslogtreecommitdiff
path: root/base/src/main/java/bjc/utils/patterns/FunctionalPatternMatcher.java
diff options
context:
space:
mode:
Diffstat (limited to 'base/src/main/java/bjc/utils/patterns/FunctionalPatternMatcher.java')
-rw-r--r--base/src/main/java/bjc/utils/patterns/FunctionalPatternMatcher.java31
1 files changed, 31 insertions, 0 deletions
diff --git a/base/src/main/java/bjc/utils/patterns/FunctionalPatternMatcher.java b/base/src/main/java/bjc/utils/patterns/FunctionalPatternMatcher.java
new file mode 100644
index 0000000..e370fa0
--- /dev/null
+++ b/base/src/main/java/bjc/utils/patterns/FunctionalPatternMatcher.java
@@ -0,0 +1,31 @@
+package bjc.utils.patterns;
+
+import bjc.functypes.*;
+
+/**
+ * A simple pattern matcher backed by a function.
+ *
+ * @author Ben Culkin
+ *
+ * @param <ReturnType> The type returned by the matcher.
+ * @param <InputType> The type to match against.
+ */
+public class FunctionalPatternMatcher<ReturnType, InputType>
+ implements PatternMatcher<ReturnType, InputType> {
+
+ private final ThrowFunction<InputType, ReturnType, NonExhaustiveMatch> matcher;
+
+ /**
+ * Create a new function-backed pattern matcher.
+ *
+ * @param matcher The function backing this matcher.
+ */
+ public FunctionalPatternMatcher(ThrowFunction<InputType, ReturnType, NonExhaustiveMatch> matcher) {
+ this.matcher = matcher;
+ }
+
+ @Override
+ public ReturnType matchFor(InputType input) throws NonExhaustiveMatch {
+ return matcher.apply(input);
+ }
+}