package org.zwobble.mammoth.docx; import com.google.common.collect.ImmutableList; import org.zwobble.mammoth.documents.DocumentElement; import org.zwobble.mammoth.results.Result; import org.zwobble.mammoth.results.Warning; import java.util.List; import java.util.function.BiFunction; import java.util.function.Function; import static org.zwobble.mammoth.util.MammothLists.list; public class ReadResult { public static final ReadResult EMPTY_SUCCESS = success(list()); public static ReadResult concat(Iterable results) { ImmutableList.Builder elements = ImmutableList.builder(); ImmutableList.Builder warnings = ImmutableList.builder(); for (ReadResult result : results) { elements.addAll(result.elements); warnings.addAll(result.warnings); } return new ReadResult(elements.build(), warnings.build()); } public static ReadResult map( Result first, ReadResult second, BiFunction, DocumentElement> function) { ImmutableList.Builder warnings = ImmutableList.builder(); warnings.addAll(first.getWarnings()); warnings.addAll(second.warnings); return new ReadResult( list(function.apply(first.getValue(), second.elements)), warnings.build()); } public static ReadResult success(DocumentElement element) { return success(list(element)); } public static ReadResult success(List elements) { return new ReadResult(elements, list()); } private final List elements; private final List warnings; public ReadResult(List elements, List warnings) { this.elements = elements; this.warnings = warnings; } public ReadResult map(Function, DocumentElement> function) { return new ReadResult(list(function.apply(elements)), warnings); } public Result> toResult() { return new Result<>(elements, warnings); } }