// Path: src/main/java/com/github/sheigutn/pushbullet/http/PostRequest.java
// public class PostRequest<TResult> extends EntityEnclosingRequest<TResult, HttpPost> {
// 
//     public PostRequest(String relativePath) {
//         super(relativePath);
//     }
// }
// 
// Path: src/main/java/com/github/sheigutn/pushbullet/stream/message/PushStreamMessage.java
// @Data
// @ToString(callSuper = true)
// public class PushStreamMessage extends StreamMessage {
// 
//     public PushStreamMessage() {
//         setType(StreamMessageType.PUSH);
//     }
// 
//     /**
//      * The ephemeral that has been transferred with this message
//      */
//     private Ephemeral push;
// 
//     /**
//      * The list of targets this message was or should be transferred to
//      */
//     private List<String> targets;
// }
// 
// Path: src/main/java/com/github/sheigutn/pushbullet/ephemeral/Ephemeral.java
// @Accessors(chain = true)
// @Data
// public class Ephemeral {
// 
//     /**
//      * The type of this ephemeral
//      */
//     @Setter(AccessLevel.PROTECTED)
//     private EphemeralType type;
// 
//     /**
//      * The identity of the user this ephemeral came from
//      */
//     @SerializedName("source_user_iden")
//     private String sourceUserIdentity;
// 
//     public enum EphemeralType {
// 
//         /**
//          * Used for SMS replies
//          */
//         @SerializedName("messaging_extension_reply")
//         SMS_REPLY,
// 
//         /**
//          * Used for universal copy paste
//          */
//         @SerializedName("clip")
//         CLIP,
// 
//         /**
//          * Used for notification mirroring
//          */
//         @SerializedName("mirror")
//         NOTIFICATION,
// 
//         /**
//          * Used for notification dismissal
//          */
//         @SerializedName("dismissal")
//         DISMISSAL;
//     }
// }
// 
// Path: src/main/java/com/github/sheigutn/pushbullet/util/ListUtil.java
// public class ListUtil {
// 
//     /**
//      * Returns a distinct list from an array
//      * @param input The input array
//      * @param <T>   The array type
//      * @return A distinct list
//      */
//     public static <T> List<T> distinctList(T[] input) {
//         return distinctList(Arrays.asList(input));
//     }
// 
//     /**
//      * Returns a distinct list from a list
//      * @param input The input list
//      * @param <T>   The list type
//      * @return A distinct list
//      */
//     public static <T> List<T> distinctList(List<T> input) {
//         if(input.isEmpty()) return input;
//         return input.stream().distinct().collect(Collectors.toList());
//     }
// 
//     /**
//      * Returns a full list of a request that calls /v2/*s (e.g. /v2/pushes, /v2/devices, etc.)
//      * @param pushbullet The pushbullet instance
//      * @param request    The request object
//      * @param function   The function of {@link ListResponse}
//      * @param <T>        The result type of the function
//      * @return A result object with the result type {@link T}
//      */
//     public static <T> List<T> fullList(Pushbullet pushbullet, ListItemsRequest request, Function<ListResponse, List<T>> function) {
//         ListResponse response = pushbullet.executeRequest(request);
//         List<T> returnList = function.apply(response);
//         while(response.getCursor() != null) {
//             response = pushbullet.executeRequest(request.setCursor(response.getCursor()));
//             returnList.addAll(function.apply(response));
//         }
//         return returnList;
//     }
// 
//     /**
//      * Returns a complete {@link ListResponse} by calling /v2/everything
//      * @param pushbullet The pushbullet instance
//      * @return A complete {@link ListResponse} object
//      */
//     public static ListResponse completeListResponse(Pushbullet pushbullet) {
//         ListItemsRequest request = new ListEverythingRequest();
//         ListResponse response = pushbullet.executeRequest(request);
//         ListResponse tempResponse = response;
//         while(tempResponse.getCursor() != null) {
//             tempResponse = pushbullet.executeRequest(request.setCursor(tempResponse.getCursor()));
//             response.addAll(tempResponse);
//         }
//         response.setCursor(null);
//         return response;
//     }
// }
// 
// Path: src/main/java/com/github/sheigutn/pushbullet/http/Urls.java
// public class Urls {
// 
//     public static final String CHANNELS = "/channels";
//     public static final String GRANTS = "/grants";
//     public static final String PUSHES = "/pushes";
//     public static final String SUBSCRIPTIONS = "/subscriptions";
//     public static final String EVERYTHING = "/everything";
//     public static final String PHONEBOOK = "/permanents/phonebook_";
//     public static final String DEVICES = "/devices";
//     public static final String CONTACTS = "/contacts";
//     public static final String CLIENTS = "/clients";
//     public static final String CHATS = "/chats";
//     public static final String ACCOUNTS = "/accounts";
//     public static final String CURRENT_USER = "/users/me";
//     public static final String CHANNEL_INFO = "/channel-info";
//     public static final String UPLOAD_REQUEST = "/upload-request";
//     public static final String EPHEMERALS = "/ephemerals";
//     public static final String BLOCKS = "/blocks";
// }


import com.github.sheigutn.pushbullet.http.PostRequest;
import com.github.sheigutn.pushbullet.stream.message.PushStreamMessage;
import com.github.sheigutn.pushbullet.ephemeral.Ephemeral;
import com.github.sheigutn.pushbullet.util.ListUtil;
import com.github.sheigutn.pushbullet.http.Urls;
import com.google.gson.Gson;
import lombok.Data;
import org.apache.http.client.methods.HttpPost;
import java.util.List;
package com.github.sheigutn.pushbullet.http.defaults.post;



@Data
public class SendEphemeralRequest extends PostRequest<Void> {

    private Ephemeral ephemeral;

    private String[] deviceTypes;

    public SendEphemeralRequest(Ephemeral ephemeral) {
// Path: src/main/java/com/github/sheigutn/pushbullet/http/PostRequest.java
// public class PostRequest<TResult> extends EntityEnclosingRequest<TResult, HttpPost> {
// 
//     public PostRequest(String relativePath) {
//         super(relativePath);
//     }
// }
// 
// Path: src/main/java/com/github/sheigutn/pushbullet/stream/message/PushStreamMessage.java
// @Data
// @ToString(callSuper = true)
// public class PushStreamMessage extends StreamMessage {
// 
//     public PushStreamMessage() {
//         setType(StreamMessageType.PUSH);
//     }
// 
//     /**
//      * The ephemeral that has been transferred with this message
//      */
//     private Ephemeral push;
// 
//     /**
//      * The list of targets this message was or should be transferred to
//      */
//     private List<String> targets;
// }
// 
// Path: src/main/java/com/github/sheigutn/pushbullet/ephemeral/Ephemeral.java
// @Accessors(chain = true)
// @Data
// public class Ephemeral {
// 
//     /**
//      * The type of this ephemeral
//      */
//     @Setter(AccessLevel.PROTECTED)
//     private EphemeralType type;
// 
//     /**
//      * The identity of the user this ephemeral came from
//      */
//     @SerializedName("source_user_iden")
//     private String sourceUserIdentity;
// 
//     public enum EphemeralType {
// 
//         /**
//          * Used for SMS replies
//          */
//         @SerializedName("messaging_extension_reply")
//         SMS_REPLY,
// 
//         /**
//          * Used for universal copy paste
//          */
//         @SerializedName("clip")
//         CLIP,
// 
//         /**
//          * Used for notification mirroring
//          */
//         @SerializedName("mirror")
//         NOTIFICATION,
// 
//         /**
//          * Used for notification dismissal
//          */
//         @SerializedName("dismissal")
//         DISMISSAL;
//     }
// }
// 
// Path: src/main/java/com/github/sheigutn/pushbullet/util/ListUtil.java
// public class ListUtil {
// 
//     /**
//      * Returns a distinct list from an array
//      * @param input The input array
//      * @param <T>   The array type
//      * @return A distinct list
//      */
//     public static <T> List<T> distinctList(T[] input) {
//         return distinctList(Arrays.asList(input));
//     }
// 
//     /**
//      * Returns a distinct list from a list
//      * @param input The input list
//      * @param <T>   The list type
//      * @return A distinct list
//      */
//     public static <T> List<T> distinctList(List<T> input) {
//         if(input.isEmpty()) return input;
//         return input.stream().distinct().collect(Collectors.toList());
//     }
// 
//     /**
//      * Returns a full list of a request that calls /v2/*s (e.g. /v2/pushes, /v2/devices, etc.)
//      * @param pushbullet The pushbullet instance
//      * @param request    The request object
//      * @param function   The function of {@link ListResponse}
//      * @param <T>        The result type of the function
//      * @return A result object with the result type {@link T}
//      */
//     public static <T> List<T> fullList(Pushbullet pushbullet, ListItemsRequest request, Function<ListResponse, List<T>> function) {
//         ListResponse response = pushbullet.executeRequest(request);
//         List<T> returnList = function.apply(response);
//         while(response.getCursor() != null) {
//             response = pushbullet.executeRequest(request.setCursor(response.getCursor()));
//             returnList.addAll(function.apply(response));
//         }
//         return returnList;
//     }
// 
//     /**
//      * Returns a complete {@link ListResponse} by calling /v2/everything
//      * @param pushbullet The pushbullet instance
//      * @return A complete {@link ListResponse} object
//      */
//     public static ListResponse completeListResponse(Pushbullet pushbullet) {
//         ListItemsRequest request = new ListEverythingRequest();
//         ListResponse response = pushbullet.executeRequest(request);
//         ListResponse tempResponse = response;
//         while(tempResponse.getCursor() != null) {
//             tempResponse = pushbullet.executeRequest(request.setCursor(tempResponse.getCursor()));
//             response.addAll(tempResponse);
//         }
//         response.setCursor(null);
//         return response;
//     }
// }
// 
// Path: src/main/java/com/github/sheigutn/pushbullet/http/Urls.java
// public class Urls {
// 
//     public static final String CHANNELS = "/channels";
//     public static final String GRANTS = "/grants";
//     public static final String PUSHES = "/pushes";
//     public static final String SUBSCRIPTIONS = "/subscriptions";
//     public static final String EVERYTHING = "/everything";
//     public static final String PHONEBOOK = "/permanents/phonebook_";
//     public static final String DEVICES = "/devices";
//     public static final String CONTACTS = "/contacts";
//     public static final String CLIENTS = "/clients";
//     public static final String CHATS = "/chats";
//     public static final String ACCOUNTS = "/accounts";
//     public static final String CURRENT_USER = "/users/me";
//     public static final String CHANNEL_INFO = "/channel-info";
//     public static final String UPLOAD_REQUEST = "/upload-request";
//     public static final String EPHEMERALS = "/ephemerals";
//     public static final String BLOCKS = "/blocks";
// }


// Path: src/main/java/com/github/sheigutn/pushbullet/http/defaults/post/SendEphemeralRequest.java
import com.github.sheigutn.pushbullet.http.PostRequest;
import com.github.sheigutn.pushbullet.stream.message.PushStreamMessage;
import com.github.sheigutn.pushbullet.ephemeral.Ephemeral;
import com.github.sheigutn.pushbullet.util.ListUtil;
import com.github.sheigutn.pushbullet.http.Urls;
import com.google.gson.Gson;
import lombok.Data;
import org.apache.http.client.methods.HttpPost;
import java.util.List;

package com.github.sheigutn.pushbullet.http.defaults.post;



@Data
public class SendEphemeralRequest extends PostRequest<Void> {

    private Ephemeral ephemeral;

    private String[] deviceTypes;

    public SendEphemeralRequest(Ephemeral ephemeral) {
        super(Urls.EPHEMERALS);