diff --git a/library/src/main/java/com/pengrad/telegrambot/TelegramBot.java b/library/src/main/java/com/pengrad/telegrambot/TelegramBot.java index edc2129d..a3afc220 100644 --- a/library/src/main/java/com/pengrad/telegrambot/TelegramBot.java +++ b/library/src/main/java/com/pengrad/telegrambot/TelegramBot.java @@ -1,9 +1,14 @@ package com.pengrad.telegrambot; import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; import com.pengrad.telegrambot.impl.FileApi; import com.pengrad.telegrambot.impl.TelegramBotClient; import com.pengrad.telegrambot.impl.UpdatesHandler; +import com.pengrad.telegrambot.model.Chat; import com.pengrad.telegrambot.model.File; import com.pengrad.telegrambot.request.BaseRequest; import com.pengrad.telegrambot.request.GetUpdates; @@ -12,6 +17,8 @@ import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; +import java.io.IOException; + /** * Stas Parshin * 16 October 2015 @@ -115,7 +122,23 @@ private static Interceptor httpLoggingInterceptor() { } private static Gson gson() { - return new Gson(); + final Gson gson = new Gson(); + TypeAdapter chatTypeAdapter = new TypeAdapter() { + @Override + public void write(JsonWriter out, Chat.Type value) throws IOException { + out.value(value == Chat.Type.Private ? "private" : value.name()); + } + + @Override + public Chat.Type read(JsonReader in) throws IOException { + String s = in.nextString(); + if (s.equals("private")) return Chat.Type.Private; + else return gson.fromJson(s, Chat.Type.class); + } + }; + return new GsonBuilder() + .registerTypeAdapter(Chat.Type.class, chatTypeAdapter) + .create(); } private static String apiUrl(String apiUrl, String botToken) { diff --git a/library/src/main/java/com/pengrad/telegrambot/impl/TelegramBotClient.java b/library/src/main/java/com/pengrad/telegrambot/impl/TelegramBotClient.java index 59889a40..b361982a 100644 --- a/library/src/main/java/com/pengrad/telegrambot/impl/TelegramBotClient.java +++ b/library/src/main/java/com/pengrad/telegrambot/impl/TelegramBotClient.java @@ -91,7 +91,7 @@ private RequestBody createRequestBody(BaseRequest request) { } else if (value instanceof File) { builder.addFormDataPart(name, request.getFileName(), RequestBody.create(contentType, (File) value)); } else { - builder.addFormDataPart(name, String.valueOf(value)); + builder.addFormDataPart(name, serialize(value)); } } @@ -99,9 +99,15 @@ private RequestBody createRequestBody(BaseRequest request) { } else { FormBody.Builder builder = new FormBody.Builder(); for (Map.Entry parameter : request.getParameters().entrySet()) { - builder.add(parameter.getKey(), String.valueOf(parameter.getValue())); + builder.add(parameter.getKey(), serialize(parameter.getValue())); } return builder.build(); } } + + private String serialize(Object value) { + return value instanceof String + ? String.valueOf(value) + : gson.toJson(value); + } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/Chat.java b/library/src/main/java/com/pengrad/telegrambot/model/Chat.java index a298d567..22f9b4a3 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/Chat.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/Chat.java @@ -1,7 +1,5 @@ package com.pengrad.telegrambot.model; -import com.google.gson.annotations.SerializedName; - import java.io.Serializable; /** @@ -12,7 +10,7 @@ public class Chat implements Serializable { private final static long serialVersionUID = 0L; public enum Type { - @SerializedName("private")Private, group, supergroup, channel + Private, group, supergroup, channel; } private Long id; diff --git a/library/src/main/java/com/pengrad/telegrambot/model/MaskPosition.java b/library/src/main/java/com/pengrad/telegrambot/model/MaskPosition.java index ca47e411..263063bd 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/MaskPosition.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/MaskPosition.java @@ -1,7 +1,5 @@ package com.pengrad.telegrambot.model; -import com.google.gson.Gson; - import java.io.Serializable; /** @@ -10,7 +8,6 @@ */ public class MaskPosition implements Serializable { private final static long serialVersionUID = 0L; - private final static Gson gson = new Gson(); public enum Point { forehead, eyes, mouth, chin diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/Keyboard.java b/library/src/main/java/com/pengrad/telegrambot/model/request/Keyboard.java index 4f3c5146..e1afeb7a 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/Keyboard.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/Keyboard.java @@ -1,7 +1,5 @@ package com.pengrad.telegrambot.model.request; -import com.google.gson.Gson; - import java.io.Serializable; /** @@ -10,13 +8,4 @@ */ public abstract class Keyboard implements Serializable { private final static long serialVersionUID = 0L; - - // todo remove gson - private static Gson gson = new Gson(); - - @Override - public final String toString() { - return gson.toJson(this); - } - } diff --git a/library/src/main/java/com/pengrad/telegrambot/request/AddStickerToSet.java b/library/src/main/java/com/pengrad/telegrambot/request/AddStickerToSet.java index fafacfae..f55ffb6b 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/AddStickerToSet.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/AddStickerToSet.java @@ -17,6 +17,6 @@ public AddStickerToSet(Integer userId, String name, Object pngSticker, String em } public AddStickerToSet maskPosition(MaskPosition maskPosition) { - return add("mask_position", serialize(maskPosition)); + return add("mask_position", maskPosition); } } diff --git a/library/src/main/java/com/pengrad/telegrambot/request/AnswerInlineQuery.java b/library/src/main/java/com/pengrad/telegrambot/request/AnswerInlineQuery.java index f23a1722..1063ef0e 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/AnswerInlineQuery.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/AnswerInlineQuery.java @@ -11,7 +11,7 @@ public class AnswerInlineQuery extends BaseRequest fullMap = new HashMap(parameters); fullMap.put("method", getMethod()); return gson.toJson(fullMap); } - - // Serialize model objects. Basically convert to json - // todo move to TelegramBotClient, let it serialize everything in request time - protected String serialize(Object o) { - return gson.toJson(o); - } } diff --git a/library/src/main/java/com/pengrad/telegrambot/request/CreateNewStickerSet.java b/library/src/main/java/com/pengrad/telegrambot/request/CreateNewStickerSet.java index b4ff7ac7..86b2e716 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/CreateNewStickerSet.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/CreateNewStickerSet.java @@ -22,6 +22,6 @@ public CreateNewStickerSet containsMasks(boolean containsMasks) { } public CreateNewStickerSet maskPosition(MaskPosition maskPosition) { - return add("mask_position", serialize(maskPosition)).containsMasks(true); + return add("mask_position", maskPosition).containsMasks(true); } } diff --git a/library/src/main/java/com/pengrad/telegrambot/request/GetUpdates.java b/library/src/main/java/com/pengrad/telegrambot/request/GetUpdates.java index 82c9c7dd..cda20902 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/GetUpdates.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/GetUpdates.java @@ -30,7 +30,7 @@ public GetUpdates timeout(int timeout) { } public GetUpdates allowedUpdates(String... allowedUpdates) { - return add("allowed_updates", serialize(allowedUpdates)); + return add("allowed_updates", allowedUpdates); } @Override diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendInvoice.java b/library/src/main/java/com/pengrad/telegrambot/request/SendInvoice.java index 94431957..7714bd0f 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendInvoice.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendInvoice.java @@ -12,7 +12,7 @@ public SendInvoice(Integer chatId, String title, String description, String payl String startParameter, String currency, LabeledPrice... prices) { super(chatId); add("title", title).add("description", description).add("payload", payload).add("provider_token", providerToken) - .add("start_parameter", startParameter).add("currency", currency).add("prices", serialize(prices)); + .add("start_parameter", startParameter).add("currency", currency).add("prices", prices); } public SendInvoice providerData(String providerData) { diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendMediaGroup.java b/library/src/main/java/com/pengrad/telegrambot/request/SendMediaGroup.java index 8548e3c2..41994524 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendMediaGroup.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendMediaGroup.java @@ -15,7 +15,7 @@ public class SendMediaGroup extends BaseRequest attachments = m.getAttachments(); diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SetWebhook.java b/library/src/main/java/com/pengrad/telegrambot/request/SetWebhook.java index c4c733b2..f149ea1c 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SetWebhook.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/SetWebhook.java @@ -35,7 +35,7 @@ public SetWebhook maxConnections(int maxConnections) { } public SetWebhook allowedUpdates(String... allowedUpdates) { - return add("allowed_updates", serialize(allowedUpdates)); + return add("allowed_updates", allowedUpdates); } @Override