// 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/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/items/file/UploadFile.java
// @Getter
// public class UploadFile {
// 
//     /**
//      * The mime type of this file
//      */
//     @SerializedName("file_type")
//     private String fileType;
// 
//     /**
//      * The name of this file
//      */
//     @SerializedName("file_name")
//     private String fileName;
// 
//     /**
//      * The url to this file
//      */
//     @SerializedName("file_url")
//     private String fileUrl;
// 
//     /**
//      * The upload url that this file should be uploaded to
//      */
//     @SerializedName("upload_url")
//     private String uploadUrl;
// 
//     /**
//      * The data for the upload to AWS
//      */
//     private AwsAuthData data;
// }


import com.github.sheigutn.pushbullet.http.PostRequest;
import com.github.sheigutn.pushbullet.http.Urls;
import com.github.sheigutn.pushbullet.items.file.UploadFile;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.SneakyThrows;
import org.apache.http.client.methods.HttpPost;
import javax.activation.MimetypesFileTypeMap;
import java.io.File;
package com.github.sheigutn.pushbullet.http.defaults.post;



@Data
public class RequestFileUploadRequest extends PostRequest<UploadFile> {

    @SerializedName("file_name")
    private String fileName;

    @SerializedName("file_type")
    private String fileType;

    public RequestFileUploadRequest(File file) {
        super(Urls.UPLOAD_REQUEST);
        this.fileName = file.getName();
        this.fileType = new MimetypesFileTypeMap().getContentType(file);
    }

// 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/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/items/file/UploadFile.java
// @Getter
// public class UploadFile {
// 
//     /**
//      * The mime type of this file
//      */
//     @SerializedName("file_type")
//     private String fileType;
// 
//     /**
//      * The name of this file
//      */
//     @SerializedName("file_name")
//     private String fileName;
// 
//     /**
//      * The url to this file
//      */
//     @SerializedName("file_url")
//     private String fileUrl;
// 
//     /**
//      * The upload url that this file should be uploaded to
//      */
//     @SerializedName("upload_url")
//     private String uploadUrl;
// 
//     /**
//      * The data for the upload to AWS
//      */
//     private AwsAuthData data;
// }


// Path: src/main/java/com/github/sheigutn/pushbullet/http/defaults/post/RequestFileUploadRequest.java
import com.github.sheigutn.pushbullet.http.PostRequest;
import com.github.sheigutn.pushbullet.http.Urls;
import com.github.sheigutn.pushbullet.items.file.UploadFile;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.SneakyThrows;
import org.apache.http.client.methods.HttpPost;
import javax.activation.MimetypesFileTypeMap;
import java.io.File;

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



@Data
public class RequestFileUploadRequest extends PostRequest<UploadFile> {

    @SerializedName("file_name")
    private String fileName;

    @SerializedName("file_type")
    private String fileType;

    public RequestFileUploadRequest(File file) {
        super(Urls.UPLOAD_REQUEST);
        this.fileName = file.getName();
        this.fileType = new MimetypesFileTypeMap().getContentType(file);
    }

    @Override