From 86207d30715fe000b95b2f8e8b55b59a21aba34b Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 24 Feb 2016 21:03:42 +0000 Subject: Turn Result into a minimal interface --- .../mammoth/internal/results/InternalResult.java | 69 ++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/main/java/org/zwobble/mammoth/internal/results/InternalResult.java (limited to 'src/main/java/org/zwobble/mammoth/internal/results/InternalResult.java') 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 implements org.zwobble.mammoth.Result { + public static InternalResult> concat(Iterable> results) { + ImmutableList.Builder elements = ImmutableList.builder(); + ImmutableList.Builder warnings = ImmutableList.builder(); + for (InternalResult result : results) { + elements.add(result.value); + warnings.addAll(result.warnings); + } + return new InternalResult<>(elements.build(), warnings.build()); + } + + public static InternalResult map( + InternalResult first, + InternalResult second, + BiFunction function) + { + return new InternalResult<>( + function.apply(first.value, second.value), + MammothLists.concat(first.warnings, second.warnings)); + } + + public static InternalResult> empty() { + return new InternalResult<>(Optional.empty(), list()); + } + + public static InternalResult success(T value) { + return new InternalResult<>(value, list()); + } + + private final T value; + private final List warnings; + + public InternalResult(T value, List warnings) { + this.value = value; + this.warnings = warnings; + } + + public T getValue() { + return value; + } + + public List getWarnings() { + return warnings; + } + + public InternalResult map(Function function) { + return new InternalResult<>(function.apply(value), warnings); + } + + public InternalResult flatMap(Function> function) { + InternalResult intermediateResult = function.apply(value); + return new InternalResult<>( + intermediateResult.value, + MammothLists.concat(warnings, intermediateResult.warnings)); + } +} -- cgit v1.2.3