class RedisReducedPropagationStorage implements ReducedPropagationStorage {

    @Override
    public Future<Void> storeQueueRequest(String queue, JsonObject queueRequest) {
        Future<Void> future = Future.future();

        if(StringUtils.isEmpty(queue)){
            future.fail("Queue is not allowed to be empty");
            return future;
        }
        if(queueRequest == null){
            future.fail("Request is not allowed to be empty");
            return future;
        }

        try {
            String queueRequestStr = queueRequest.encode();
            redisClient.hset(QUEUE_REQUESTS, queue, queueRequestStr, reply -> {
                if(reply.failed()){
                    String message = "Failed to store request for queue '"+queue+"'. Cause: " + logCause(reply);
                    log.error(message);
                    future.fail(message);
                } else {
                    future.complete();
                }
            });
        } catch (DecodeException ex){
            future.fail("Failed to decode request for queue '"+queue+"'");
            return future;
        }
        return future;
    }

    public  RedisReducedPropagationStorage(RedisClient redisClient);

}