All Downloads are FREE. Search and download functionalities are using the official Maven repository.

no.finn.lambdacompanion.Failure Maven / Gradle / Ivy

There is a newer version: 0.27
Show newest version
package no.finn.lambdacompanion;

import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

public class Failure extends Try {

    private Exception e;

    public Failure(Exception e) {
        this.e = e;
    }

    public Exception getException() {
        return e;
    }

    @SuppressWarnings("unchecked")
    @Override
    public  Try map(ThrowingFunction mapper) {
        return (Try) this;
    }

    @SuppressWarnings("unchecked")
    @Override
    public  Try flatMap(ThrowingFunction, ? extends Exception> mapper) {
        return (Try) this;
    }

    @Override
    public Optional> filter(final Predicate predicate) {
        return Optional.of(this);
    }

    @Override
    public void forEach(ThrowingConsumer consumer) {}

    @Override
    public Try peek(ThrowingConsumer consumer) {
        forEach(consumer);
        return this;
    }

    @Override
    public Try peekFailure(Consumer> consumer) {
        consumer.accept(this);
        return this;
    }

    @Override
    public T orElse(T defaultValue) {
        return defaultValue;
    }

    @Override
    public T orElseGet(Supplier defaultValue) {
        return defaultValue.get();
    }

    @Override
    public Optional toOptional() {
        return Optional.empty();
    }

    @Override
    public  U recover(Function successFunc,
                           Function failureFunc) {
        return failureFunc.apply(e);
    }

    @Override
    public Either toEither() {
        return Either.left(e);
    }

    @SuppressWarnings("unchecked")
    @Override
    public  T orElseThrow(Function ExceptionMapper) throws Y {
        throw ExceptionMapper.apply((X) e);
    }

    @Override
    public  T orElseRethrow() throws E {
        throw (E) e;
    }

    @Override
    public String toString() {
        return "Failure{" +
                "e=" + e +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Failure failure = (Failure) o;

        return !(e != null ? !e.equals(failure.e) : failure.e != null);

    }

    @Override
    public int hashCode() {
        return e != null ? e.hashCode() : 0;
    }

}