class Sending implements SendingOrDropped {

    @SuppressWarnings("rawtypes")
    @Override
    public Optional<CompletionStage<CommandResponse>> monitorAndAcknowledge(
            final ExceptionToAcknowledgementConverter exceptionConverter) {

        return Optional.of(futureResponse
                .thenApply(response -> acknowledge(response, exceptionConverter))
                .thenApply(this::monitor)
                .exceptionally(error -> {
                    final Acknowledgement result = handleException(getRootCause(error), exceptionConverter);
                    monitor(result);
                    return result;
                }));
    }

      Sending(final SendingContext sendingContext, final CompletionStage<CommandResponse<?>> futureResponse,
            final ThreadSafeDittoLoggingAdapter logger);

}