001/*
002 * (C) Copyright 2019 Nuxeo (http://nuxeo.com/) and others.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 *  Unless required by applicable law or agreed to in writing, software
011 *  distributed under the License is distributed on an "AS IS" BASIS,
012 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *  See the License for the specific language governing permissions and
014 *  limitations under the License.
015 *
016 *  Contributors:
017 *      Kevin Leturc <kleturc@nuxeo.com>
018 */
019
020package org.nuxeo.common.function;
021
022import java.util.function.Consumer;
023
024/**
025 * @param <T> the type of the input to the operation
026 * @param <E> the type of exception to throw
027 * @since 11.1
028 */
029@FunctionalInterface
030public interface ThrowableConsumer<T, E extends Throwable> {
031
032    void accept(T t) throws E;
033
034    /**
035     * @return this {@link ThrowableConsumer} as a {@link Consumer} throwing the checked exception as an unchecked one
036     */
037    default Consumer<T> toConsumer() {
038        return asConsumer(this);
039    }
040
041    /**
042     * @return the given {@link ThrowableConsumer} as a {@link Consumer} throwing the checked exception as an unchecked
043     *         one
044     */
045    static <T, E extends Throwable> Consumer<T> asConsumer(ThrowableConsumer<T, E> throwableConsumer) {
046        return arg -> {
047            try {
048                throwableConsumer.accept(arg);
049            } catch (Throwable t) { // NOSONAR
050                FunctionUtils.sneakyThrow(t);
051            }
052        };
053    }
054
055}