aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/mammoth/results/Result.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-13 18:22:02 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-13 18:22:02 +0000
commitcf6808f01f8aff295548f2de62b86498e4996141 (patch)
treeb7e8e507ea837ffb56fc0e530387f0300f13b317 /src/main/java/org/zwobble/mammoth/results/Result.java
parenta431972f98d98114dc9a5a65a3fbaf68967a8161 (diff)
Add warnings to results
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/results/Result.java')
-rw-r--r--src/main/java/org/zwobble/mammoth/results/Result.java44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/mammoth/results/Result.java b/src/main/java/org/zwobble/mammoth/results/Result.java
new file mode 100644
index 0000000..846841e
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/results/Result.java
@@ -0,0 +1,44 @@
+package org.zwobble.mammoth.results;
+
+import com.google.common.collect.ImmutableList;
+
+import java.util.List;
+import java.util.function.Function;
+
+import static org.zwobble.mammoth.util.MammothLists.list;
+
+public class Result<T> {
+ public static <T> Result<List<T>> concat(Iterable<Result<T>> results) {
+ ImmutableList.Builder<T> elements = ImmutableList.builder();
+ ImmutableList.Builder<Warning> warnings = ImmutableList.builder();
+ for (Result<T> result : results) {
+ elements.add(result.value);
+ warnings.addAll(result.warnings);
+ }
+ return new Result<>(elements.build(), warnings.build());
+ }
+
+ public static <T> Result<T> success(T value) {
+ return new Result<>(value, list());
+ }
+
+ private final T value;
+ private final List<Warning> warnings;
+
+ public Result(T value, List<Warning> warnings) {
+ this.value = value;
+ this.warnings = warnings;
+ }
+
+ public T getValue() {
+ return value;
+ }
+
+ public List<Warning> getWarnings() {
+ return warnings;
+ }
+
+ public <R> Result<R> map(Function<T, R> function) {
+ return new Result<>(function.apply(value), warnings);
+ }
+}