aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/mammoth/internal/results/InternalResult.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-24 21:03:42 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-24 21:03:42 +0000
commit86207d30715fe000b95b2f8e8b55b59a21aba34b (patch)
treecb61c8c131c6201a23995706d1124d79812e1d5f /src/main/java/org/zwobble/mammoth/internal/results/InternalResult.java
parentd4ac19bac1d0e1315d129c39de56121def95007b (diff)
Turn Result into a minimal interface
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/internal/results/InternalResult.java')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/results/InternalResult.java69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/results/InternalResult.java b/src/main/java/org/zwobble/mammoth/internal/results/InternalResult.java
new file mode 100644
index 0000000..b3c9ec7
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/results/InternalResult.java
@@ -0,0 +1,69 @@
+package org.zwobble.mammoth.internal.results;
+
+import com.google.common.collect.ImmutableList;
+import org.zwobble.mammoth.internal.documents.Style;
+import org.zwobble.mammoth.internal.util.MammothLists;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.function.BiFunction;
+import java.util.function.Function;
+
+import static org.zwobble.mammoth.internal.util.MammothLists.list;
+
+public class InternalResult<T> implements org.zwobble.mammoth.Result<T> {
+ public static <T> InternalResult<List<T>> concat(Iterable<InternalResult<T>> results) {
+ ImmutableList.Builder<T> elements = ImmutableList.builder();
+ ImmutableList.Builder<Warning> warnings = ImmutableList.builder();
+ for (InternalResult<T> result : results) {
+ elements.add(result.value);
+ warnings.addAll(result.warnings);
+ }
+ return new InternalResult<>(elements.build(), warnings.build());
+ }
+
+ public static <T1, T2, R> InternalResult<R> map(
+ InternalResult<T1> first,
+ InternalResult<T2> second,
+ BiFunction<T1, T2, R> function)
+ {
+ return new InternalResult<>(
+ function.apply(first.value, second.value),
+ MammothLists.concat(first.warnings, second.warnings));
+ }
+
+ public static InternalResult<Optional<Style>> empty() {
+ return new InternalResult<>(Optional.empty(), list());
+ }
+
+ public static <T> InternalResult<T> success(T value) {
+ return new InternalResult<>(value, list());
+ }
+
+ private final T value;
+ private final List<Warning> warnings;
+
+ public InternalResult(T value, List<Warning> warnings) {
+ this.value = value;
+ this.warnings = warnings;
+ }
+
+ public T getValue() {
+ return value;
+ }
+
+ public List<Warning> getWarnings() {
+ return warnings;
+ }
+
+ public <R> InternalResult<R> map(Function<T, R> function) {
+ return new InternalResult<>(function.apply(value), warnings);
+ }
+
+ public <R> InternalResult<R> flatMap(Function<T, InternalResult<R>> function) {
+ InternalResult<R> intermediateResult = function.apply(value);
+ return new InternalResult<>(
+ intermediateResult.value,
+ MammothLists.concat(warnings, intermediateResult.warnings));
+ }
+}