// Path: src/main/java/io/github/jklingsporn/vertx/push/SendOptions.java
// public class SendOptions {
// 
//     public enum DelayedOption{
//         TIMEZONE("timezone"),
//         LAST_ACTIVE("last-active");
// 
//         private final String alias;
// 
//         DelayedOption(String alias) {
//             this.alias = alias;
//         }
//     }
// 
//     public enum Platform{
//         AMAZON("isAdm"),
//         ANDROID("isAndroid"),
//         CHROME("isChrome"),
//         CHROME_APP("isChromeWeb"),
//         FIREFOX("isFirefox"),
//         IOS("isIos"),
//         SAFARI("isSafari"),
//         WEB("isAnyWeb"),
//         WINDOWS_PHONE("isWP"),
//         WINDOWS_PHONE_WNS("isWP_WNS"),
//         ;
//         private final String alias;
// 
//         Platform(String alias) {
//             this.alias = alias;
//         }
//     }
// 
//     private final JsonObject content;
// 
//     public SendOptions() {
//         this(new JsonObject());
//     }
// 
//     public SendOptions(JsonObject content) {
//         this.content = content;
//     }
// 
//     public SendOptions setTTL(int ttl){
//         return setCustom("ttl", ttl);
//     }
// 
//     public SendOptions setPriority(int priority){
//         return setCustom("priority", priority);
//     }
// 
//     public SendOptions setDelayedOption(DelayedOption option){
//         return setCustom("delayed_option",option.alias);
//     }
// 
//     public SendOptions setPlatform(Set<Platform> platforms){
//         platforms.stream().forEach(p->content.put(p.alias,true));
//         return this;
//     }
// 
//     public SendOptions setData(JsonObject data){
//         return setCustom("data",data);
//     }
// 
//     public SendOptions setUrl(String url){
//         return setCustom("url",url);
//     }
// 
//     public SendOptions setCustom(String key, Object value){
//         content.put(key,value);
//         return this;
//     }
// 
//     JsonObject toJson(){
//         return content;
//     }
// 
// }
// 
// Path: src/main/java/io/github/jklingsporn/vertx/push/SendStep.java
// public interface SendStep extends PushStep{
// 
//     /**
//      *
//      * @param resultHandler
//      */
//     void sendNow(Handler<AsyncResult<JsonObject>> resultHandler);
// 
//     /**
//      *
//      * @param afterDate
//      * @param resultHandler
//      */
//     void sendAfter(ZonedDateTime afterDate, Handler<AsyncResult<JsonObject>> resultHandler);
// 
// }
// 
// Path: src/main/java/io/github/jklingsporn/vertx/push/SendWithOptionsStep.java
// public interface SendWithOptionsStep extends SendStep{
// 
//     /**
//      * Specify further options. Some common options are directly included in the <code>SendOptions</code> class others
//      * can be manually added using the <code>SendOptions#addCustom</code>-method.<br>
//      * <b>Example:</b> <code>new SendOptions().setPlatform(EnumSet.of(SendOptions.Platform.AMAZON, SendOptions.Platform.ANDROID)).setCustom("foo","bar")</code>
//      * @param sendOptions
//      * @return a SendStep
//      * @see <a href="https://documentation.onesignal.com/reference#section-example-code-create-notification">OneSignal documentation</a>
//      */
//     SendStep addOptions(SendOptions sendOptions);
// 
// }


import io.github.jklingsporn.vertx.push.SendOptions;
import io.github.jklingsporn.vertx.push.SendStep;
import io.github.jklingsporn.vertx.push.SendWithOptionsStep;
import io.vertx.core.AsyncResult;
import io.vertx.core.Future;
import io.vertx.core.Handler;
import io.vertx.core.json.JsonObject;
import java.time.ZonedDateTime;
package io.github.jklingsporn.vertx.push.noop;



/**
 * Created by jensklingsporn on 03.01.17.
 */
class NoopSendWithOptionsStep extends AbstractNoopPushStep implements SendWithOptionsStep{

    private static NoopSendWithOptionsStep INSTANCE;
    public static NoopSendWithOptionsStep getInstance() {
        return INSTANCE == null ? INSTANCE = new NoopSendWithOptionsStep() : INSTANCE;
    }

    @Override
// Path: src/main/java/io/github/jklingsporn/vertx/push/SendOptions.java
// public class SendOptions {
// 
//     public enum DelayedOption{
//         TIMEZONE("timezone"),
//         LAST_ACTIVE("last-active");
// 
//         private final String alias;
// 
//         DelayedOption(String alias) {
//             this.alias = alias;
//         }
//     }
// 
//     public enum Platform{
//         AMAZON("isAdm"),
//         ANDROID("isAndroid"),
//         CHROME("isChrome"),
//         CHROME_APP("isChromeWeb"),
//         FIREFOX("isFirefox"),
//         IOS("isIos"),
//         SAFARI("isSafari"),
//         WEB("isAnyWeb"),
//         WINDOWS_PHONE("isWP"),
//         WINDOWS_PHONE_WNS("isWP_WNS"),
//         ;
//         private final String alias;
// 
//         Platform(String alias) {
//             this.alias = alias;
//         }
//     }
// 
//     private final JsonObject content;
// 
//     public SendOptions() {
//         this(new JsonObject());
//     }
// 
//     public SendOptions(JsonObject content) {
//         this.content = content;
//     }
// 
//     public SendOptions setTTL(int ttl){
//         return setCustom("ttl", ttl);
//     }
// 
//     public SendOptions setPriority(int priority){
//         return setCustom("priority", priority);
//     }
// 
//     public SendOptions setDelayedOption(DelayedOption option){
//         return setCustom("delayed_option",option.alias);
//     }
// 
//     public SendOptions setPlatform(Set<Platform> platforms){
//         platforms.stream().forEach(p->content.put(p.alias,true));
//         return this;
//     }
// 
//     public SendOptions setData(JsonObject data){
//         return setCustom("data",data);
//     }
// 
//     public SendOptions setUrl(String url){
//         return setCustom("url",url);
//     }
// 
//     public SendOptions setCustom(String key, Object value){
//         content.put(key,value);
//         return this;
//     }
// 
//     JsonObject toJson(){
//         return content;
//     }
// 
// }
// 
// Path: src/main/java/io/github/jklingsporn/vertx/push/SendStep.java
// public interface SendStep extends PushStep{
// 
//     /**
//      *
//      * @param resultHandler
//      */
//     void sendNow(Handler<AsyncResult<JsonObject>> resultHandler);
// 
//     /**
//      *
//      * @param afterDate
//      * @param resultHandler
//      */
//     void sendAfter(ZonedDateTime afterDate, Handler<AsyncResult<JsonObject>> resultHandler);
// 
// }
// 
// Path: src/main/java/io/github/jklingsporn/vertx/push/SendWithOptionsStep.java
// public interface SendWithOptionsStep extends SendStep{
// 
//     /**
//      * Specify further options. Some common options are directly included in the <code>SendOptions</code> class others
//      * can be manually added using the <code>SendOptions#addCustom</code>-method.<br>
//      * <b>Example:</b> <code>new SendOptions().setPlatform(EnumSet.of(SendOptions.Platform.AMAZON, SendOptions.Platform.ANDROID)).setCustom("foo","bar")</code>
//      * @param sendOptions
//      * @return a SendStep
//      * @see <a href="https://documentation.onesignal.com/reference#section-example-code-create-notification">OneSignal documentation</a>
//      */
//     SendStep addOptions(SendOptions sendOptions);
// 
// }


// Path: src/main/java/io/github/jklingsporn/vertx/push/noop/NoopSendWithOptionsStep.java
import io.github.jklingsporn.vertx.push.SendOptions;
import io.github.jklingsporn.vertx.push.SendStep;
import io.github.jklingsporn.vertx.push.SendWithOptionsStep;
import io.vertx.core.AsyncResult;
import io.vertx.core.Future;
import io.vertx.core.Handler;
import io.vertx.core.json.JsonObject;
import java.time.ZonedDateTime;

package io.github.jklingsporn.vertx.push.noop;



/**
 * Created by jensklingsporn on 03.01.17.
 */
class NoopSendWithOptionsStep extends AbstractNoopPushStep implements SendWithOptionsStep{

    private static NoopSendWithOptionsStep INSTANCE;
    public static NoopSendWithOptionsStep getInstance() {
        return INSTANCE == null ? INSTANCE = new NoopSendWithOptionsStep() : INSTANCE;
    }

    @Override
    public SendStep addOptions(SendOptions sendOptions) {