From c70ffd095a6de5cd5b872796a0d82a8c5afc1511 Mon Sep 17 00:00:00 2001
From: Uko Kokņevičs
Date: Sat, 20 Jul 2024 17:22:25 +0300
Subject: Initial commit
---
src/types/Animation.zig | 11 +++
src/types/Audio.zig | 11 +++
src/types/BotName.zig | 1 +
src/types/BusinessConnection.zig | 8 ++
src/types/BusinessMessagesDeleted.zig | 5 +
src/types/CallbackGame.zig | 1 +
src/types/CallbackQuery.zig | 10 ++
src/types/Chat.zig | 14 +++
src/types/ChatBackground.zig | 3 +
src/types/ChatBoost.zig | 6 ++
src/types/ChatBoostAdded.zig | 1 +
src/types/ChatBoostRemoved.zig | 7 ++
src/types/ChatBoostUpdated.zig | 5 +
src/types/ChatInviteLink.zig | 11 +++
src/types/ChatJoinRequest.zig | 10 ++
src/types/ChatMemberUpdated.zig | 13 +++
src/types/ChatShared.zig | 7 ++
src/types/ChosenInlineResult.zig | 8 ++
src/types/Contact.zig | 5 +
src/types/Dice.zig | 2 +
src/types/Document.zig | 8 ++
src/types/EditMessageTextParams.zig | 16 ++++
src/types/EncryptedCredentials.zig | 3 +
src/types/EncryptedPassportElement.zig | 30 ++++++
src/types/ExternalReplyInfo.zig | 47 ++++++++++
src/types/File.zig | 4 +
src/types/ForumTopicClosed.zig | 1 +
src/types/ForumTopicCreated.zig | 3 +
src/types/ForumTopicEdited.zig | 2 +
src/types/ForumTopicReopened.zig | 1 +
src/types/Game.zig | 10 ++
src/types/GeneralForumTopicHidden.zig | 1 +
src/types/GeneralForumTopicUnhidden.zig | 1 +
src/types/GetMyNameParams.zig | 1 +
src/types/GetUpdatesParams.zig | 4 +
src/types/Giveaway.zig | 10 ++
src/types/GiveawayCompleted.zig | 5 +
src/types/GiveawayCreated.zig | 1 +
src/types/GiveawayWinners.zig | 14 +++
src/types/InlineKeyboardButton.zig | 15 +++
src/types/InlineKeyboardMarkup.zig | 3 +
src/types/InlineQuery.zig | 17 ++++
src/types/Invoice.zig | 5 +
src/types/LinkPreviewOptions.zig | 5 +
src/types/Location.zig | 6 ++
src/types/LoginUrl.zig | 4 +
src/types/MaskPosition.zig | 11 +++
src/types/Message.zig | 139 ++++++++++++++++++++++++++++
src/types/MessageAutoDeleteTimerChanged.zig | 1 +
src/types/MessageEntity.zig | 66 +++++++++++++
src/types/MessageReactionCountUpdated.zig | 7 ++
src/types/MessageReactionUpdated.zig | 11 +++
src/types/OrderInfo.zig | 6 ++
src/types/PaidMediaInfo.zig | 4 +
src/types/PassportData.zig | 5 +
src/types/PassportFile.zig | 4 +
src/types/PhotoSize.zig | 5 +
src/types/Poll.zig | 22 +++++
src/types/PollAnswer.zig | 7 ++
src/types/PollOption.zig | 5 +
src/types/PreCheckoutQuery.zig | 10 ++
src/types/ProximityAlertTriggered.zig | 5 +
src/types/ReactionCount.zig | 4 +
src/types/RefundedPayment.zig | 5 +
src/types/ReplyParameters.zig | 9 ++
src/types/ResponseParameters.zig | 2 +
src/types/SendMessageParams.zig | 18 ++++
src/types/SetMyNameParams.zig | 2 +
src/types/SharedUser.zig | 7 ++
src/types/ShippingAddress.zig | 6 ++
src/types/ShippingQuery.zig | 7 ++
src/types/Sticker.zig | 25 +++++
src/types/Story.zig | 4 +
src/types/SuccessfulPayment.zig | 9 ++
src/types/SwitchInlineQueryChosenChat.zig | 5 +
src/types/TextQuote.zig | 6 ++
src/types/Update.zig | 41 ++++++++
src/types/User.zig | 32 +++++++
src/types/UsersShared.zig | 4 +
src/types/Venue.zig | 9 ++
src/types/Video.zig | 11 +++
src/types/VideoChatEnded.zig | 1 +
src/types/VideoChatParticipantsInvited.zig | 3 +
src/types/VideoChatScheduled.zig | 1 +
src/types/VideoChatStarted.zig | 1 +
src/types/VideoNote.zig | 8 ++
src/types/Voice.zig | 5 +
src/types/WebAppData.zig | 2 +
src/types/WebAppInfo.zig | 1 +
src/types/WriteAccessAllowed.zig | 3 +
src/types/background_fill.zig | 17 ++++
src/types/background_type.zig | 30 ++++++
src/types/chat_boost_source.zig | 20 ++++
src/types/chat_member.zig | 63 +++++++++++++
src/types/message_origin.zig | 29 ++++++
src/types/paid_media.zig | 21 +++++
src/types/parse_mode.zig | 5 +
src/types/reaction_type.zig | 13 +++
98 files changed, 1093 insertions(+)
create mode 100644 src/types/Animation.zig
create mode 100644 src/types/Audio.zig
create mode 100644 src/types/BotName.zig
create mode 100644 src/types/BusinessConnection.zig
create mode 100644 src/types/BusinessMessagesDeleted.zig
create mode 100644 src/types/CallbackGame.zig
create mode 100644 src/types/CallbackQuery.zig
create mode 100644 src/types/Chat.zig
create mode 100644 src/types/ChatBackground.zig
create mode 100644 src/types/ChatBoost.zig
create mode 100644 src/types/ChatBoostAdded.zig
create mode 100644 src/types/ChatBoostRemoved.zig
create mode 100644 src/types/ChatBoostUpdated.zig
create mode 100644 src/types/ChatInviteLink.zig
create mode 100644 src/types/ChatJoinRequest.zig
create mode 100644 src/types/ChatMemberUpdated.zig
create mode 100644 src/types/ChatShared.zig
create mode 100644 src/types/ChosenInlineResult.zig
create mode 100644 src/types/Contact.zig
create mode 100644 src/types/Dice.zig
create mode 100644 src/types/Document.zig
create mode 100644 src/types/EditMessageTextParams.zig
create mode 100644 src/types/EncryptedCredentials.zig
create mode 100644 src/types/EncryptedPassportElement.zig
create mode 100644 src/types/ExternalReplyInfo.zig
create mode 100644 src/types/File.zig
create mode 100644 src/types/ForumTopicClosed.zig
create mode 100644 src/types/ForumTopicCreated.zig
create mode 100644 src/types/ForumTopicEdited.zig
create mode 100644 src/types/ForumTopicReopened.zig
create mode 100644 src/types/Game.zig
create mode 100644 src/types/GeneralForumTopicHidden.zig
create mode 100644 src/types/GeneralForumTopicUnhidden.zig
create mode 100644 src/types/GetMyNameParams.zig
create mode 100644 src/types/GetUpdatesParams.zig
create mode 100644 src/types/Giveaway.zig
create mode 100644 src/types/GiveawayCompleted.zig
create mode 100644 src/types/GiveawayCreated.zig
create mode 100644 src/types/GiveawayWinners.zig
create mode 100644 src/types/InlineKeyboardButton.zig
create mode 100644 src/types/InlineKeyboardMarkup.zig
create mode 100644 src/types/InlineQuery.zig
create mode 100644 src/types/Invoice.zig
create mode 100644 src/types/LinkPreviewOptions.zig
create mode 100644 src/types/Location.zig
create mode 100644 src/types/LoginUrl.zig
create mode 100644 src/types/MaskPosition.zig
create mode 100644 src/types/Message.zig
create mode 100644 src/types/MessageAutoDeleteTimerChanged.zig
create mode 100644 src/types/MessageEntity.zig
create mode 100644 src/types/MessageReactionCountUpdated.zig
create mode 100644 src/types/MessageReactionUpdated.zig
create mode 100644 src/types/OrderInfo.zig
create mode 100644 src/types/PaidMediaInfo.zig
create mode 100644 src/types/PassportData.zig
create mode 100644 src/types/PassportFile.zig
create mode 100644 src/types/PhotoSize.zig
create mode 100644 src/types/Poll.zig
create mode 100644 src/types/PollAnswer.zig
create mode 100644 src/types/PollOption.zig
create mode 100644 src/types/PreCheckoutQuery.zig
create mode 100644 src/types/ProximityAlertTriggered.zig
create mode 100644 src/types/ReactionCount.zig
create mode 100644 src/types/RefundedPayment.zig
create mode 100644 src/types/ReplyParameters.zig
create mode 100644 src/types/ResponseParameters.zig
create mode 100644 src/types/SendMessageParams.zig
create mode 100644 src/types/SetMyNameParams.zig
create mode 100644 src/types/SharedUser.zig
create mode 100644 src/types/ShippingAddress.zig
create mode 100644 src/types/ShippingQuery.zig
create mode 100644 src/types/Sticker.zig
create mode 100644 src/types/Story.zig
create mode 100644 src/types/SuccessfulPayment.zig
create mode 100644 src/types/SwitchInlineQueryChosenChat.zig
create mode 100644 src/types/TextQuote.zig
create mode 100644 src/types/Update.zig
create mode 100644 src/types/User.zig
create mode 100644 src/types/UsersShared.zig
create mode 100644 src/types/Venue.zig
create mode 100644 src/types/Video.zig
create mode 100644 src/types/VideoChatEnded.zig
create mode 100644 src/types/VideoChatParticipantsInvited.zig
create mode 100644 src/types/VideoChatScheduled.zig
create mode 100644 src/types/VideoChatStarted.zig
create mode 100644 src/types/VideoNote.zig
create mode 100644 src/types/Voice.zig
create mode 100644 src/types/WebAppData.zig
create mode 100644 src/types/WebAppInfo.zig
create mode 100644 src/types/WriteAccessAllowed.zig
create mode 100644 src/types/background_fill.zig
create mode 100644 src/types/background_type.zig
create mode 100644 src/types/chat_boost_source.zig
create mode 100644 src/types/chat_member.zig
create mode 100644 src/types/message_origin.zig
create mode 100644 src/types/paid_media.zig
create mode 100644 src/types/parse_mode.zig
create mode 100644 src/types/reaction_type.zig
(limited to 'src/types')
diff --git a/src/types/Animation.zig b/src/types/Animation.zig
new file mode 100644
index 0000000..f5d6efc
--- /dev/null
+++ b/src/types/Animation.zig
@@ -0,0 +1,11 @@
+const PhotoSize = @import("PhotoSize.zig");
+
+file_id: []const u8,
+file_unique_id: []const u8,
+width: u64,
+height: u64,
+duration: u64,
+thumbnail: ?[]PhotoSize = null,
+file_name: ?[]const u8 = null,
+mime_type: ?[]const u8 = null,
+file_size: ?u64 = null,
diff --git a/src/types/Audio.zig b/src/types/Audio.zig
new file mode 100644
index 0000000..1914088
--- /dev/null
+++ b/src/types/Audio.zig
@@ -0,0 +1,11 @@
+const PhotoSize = @import("PhotoSize.zig");
+
+file_id: []const u8,
+file_unique_id: []const u8,
+duration: u64,
+performer: ?[]const u8 = null,
+title: ?[]const u8 = null,
+file_name: ?[]const u8 = null,
+mime_type: ?[]const u8 = null,
+file_size: ?u64 = null,
+thumbnail: ?PhotoSize = null,
diff --git a/src/types/BotName.zig b/src/types/BotName.zig
new file mode 100644
index 0000000..61a2cb6
--- /dev/null
+++ b/src/types/BotName.zig
@@ -0,0 +1 @@
+name: []const u8,
diff --git a/src/types/BusinessConnection.zig b/src/types/BusinessConnection.zig
new file mode 100644
index 0000000..0801235
--- /dev/null
+++ b/src/types/BusinessConnection.zig
@@ -0,0 +1,8 @@
+const User = @import("User.zig");
+
+id: []const u8,
+user: User,
+user_chat_id: i64,
+date: u64,
+can_reply: bool,
+is_enabled: bool,
diff --git a/src/types/BusinessMessagesDeleted.zig b/src/types/BusinessMessagesDeleted.zig
new file mode 100644
index 0000000..ef55793
--- /dev/null
+++ b/src/types/BusinessMessagesDeleted.zig
@@ -0,0 +1,5 @@
+const Chat = @import("Chat.zig");
+
+business_connection_id: []const u8,
+chat: Chat,
+message_ids: []u64,
diff --git a/src/types/CallbackGame.zig b/src/types/CallbackGame.zig
new file mode 100644
index 0000000..2f72c10
--- /dev/null
+++ b/src/types/CallbackGame.zig
@@ -0,0 +1 @@
+// meant to be empty
diff --git a/src/types/CallbackQuery.zig b/src/types/CallbackQuery.zig
new file mode 100644
index 0000000..8fb96c3
--- /dev/null
+++ b/src/types/CallbackQuery.zig
@@ -0,0 +1,10 @@
+const MaybeInaccessibleMessage = @import("Message.zig");
+const User = @import("User.zig");
+
+id: []const u8,
+from: User,
+message: ?MaybeInaccessibleMessage = null,
+inline_message_id: ?[]const u8 = null,
+chat_instance: []const u8,
+data: ?[]const u8 = null,
+game_short_name: ?[]const u8 = null,
diff --git a/src/types/Chat.zig b/src/types/Chat.zig
new file mode 100644
index 0000000..f44e480
--- /dev/null
+++ b/src/types/Chat.zig
@@ -0,0 +1,14 @@
+pub const Type = enum {
+ private,
+ group,
+ supergroup,
+ channel,
+};
+
+id: i64,
+type: Type,
+title: ?[]const u8 = null,
+username: ?[]const u8 = null,
+first_name: ?[]const u8 = null,
+last_name: ?[]const u8 = null,
+is_forum: bool = false,
diff --git a/src/types/ChatBackground.zig b/src/types/ChatBackground.zig
new file mode 100644
index 0000000..34d2e15
--- /dev/null
+++ b/src/types/ChatBackground.zig
@@ -0,0 +1,3 @@
+const BackgroundType = @import("background_type.zig").BackgroundType;
+
+type: BackgroundType,
diff --git a/src/types/ChatBoost.zig b/src/types/ChatBoost.zig
new file mode 100644
index 0000000..353805b
--- /dev/null
+++ b/src/types/ChatBoost.zig
@@ -0,0 +1,6 @@
+const ChatBoostSource = @import("chat_boost_source.zig").ChatBoostSource;
+
+boost_id: []const u8,
+add_date: u64,
+expiration_date: u64,
+source: ChatBoostSource,
diff --git a/src/types/ChatBoostAdded.zig b/src/types/ChatBoostAdded.zig
new file mode 100644
index 0000000..487ae70
--- /dev/null
+++ b/src/types/ChatBoostAdded.zig
@@ -0,0 +1 @@
+boost_count: u64,
diff --git a/src/types/ChatBoostRemoved.zig b/src/types/ChatBoostRemoved.zig
new file mode 100644
index 0000000..0d61bc5
--- /dev/null
+++ b/src/types/ChatBoostRemoved.zig
@@ -0,0 +1,7 @@
+const Chat = @import("Chat.zig");
+const ChatBoostSource = @import("chat_boost_source.zig").ChatBoostSource;
+
+chat: Chat,
+boost_id: []const u8,
+remove_date: u64,
+source: ChatBoostSource,
diff --git a/src/types/ChatBoostUpdated.zig b/src/types/ChatBoostUpdated.zig
new file mode 100644
index 0000000..e7ad33c
--- /dev/null
+++ b/src/types/ChatBoostUpdated.zig
@@ -0,0 +1,5 @@
+const Chat = @import("Chat.zig");
+const ChatBoost = @import("ChatBoost.zig");
+
+chat: Chat,
+boost: ChatBoost,
diff --git a/src/types/ChatInviteLink.zig b/src/types/ChatInviteLink.zig
new file mode 100644
index 0000000..41a1f44
--- /dev/null
+++ b/src/types/ChatInviteLink.zig
@@ -0,0 +1,11 @@
+const User = @import("User.zig");
+
+invite_link: []const u8,
+creator: User,
+creates_join_request: bool,
+is_primary: bool,
+is_revoked: bool,
+name: ?[]const u8,
+expire_date: ?u64,
+member_limit: ?u64,
+pending_join_request_count: ?u64,
diff --git a/src/types/ChatJoinRequest.zig b/src/types/ChatJoinRequest.zig
new file mode 100644
index 0000000..f08e070
--- /dev/null
+++ b/src/types/ChatJoinRequest.zig
@@ -0,0 +1,10 @@
+const Chat = @import("Chat.zig");
+const ChatInviteLink = @import("ChatInviteLink.zig");
+const User = @import("User.zig");
+
+chat: Chat,
+from: User,
+user_chat_id: i64,
+date: u64,
+bio: ?[]const u8,
+invite_link: ?ChatInviteLink,
diff --git a/src/types/ChatMemberUpdated.zig b/src/types/ChatMemberUpdated.zig
new file mode 100644
index 0000000..8df56ec
--- /dev/null
+++ b/src/types/ChatMemberUpdated.zig
@@ -0,0 +1,13 @@
+const Chat = @import("Chat.zig");
+const ChatInviteLink = @import("ChatInviteLink.zig");
+const ChatMember = @import("chat_member.zig").ChatMember;
+const User = @import("User.zig");
+
+chat: Chat,
+from: User,
+date: u64,
+old_chat_member: ChatMember,
+new_chat_member: ChatMember,
+invite_link: ?ChatInviteLink = null,
+via_join_request: bool = false,
+via_chat_folder_invite_link: bool = false,
diff --git a/src/types/ChatShared.zig b/src/types/ChatShared.zig
new file mode 100644
index 0000000..7b49f02
--- /dev/null
+++ b/src/types/ChatShared.zig
@@ -0,0 +1,7 @@
+const PhotoSize = @import("PhotoSize.zig");
+
+request_id: u64,
+chat_id: i64,
+title: ?[]const u8 = null,
+username: ?[]const u8 = null,
+photo: ?[]PhotoSize = null,
diff --git a/src/types/ChosenInlineResult.zig b/src/types/ChosenInlineResult.zig
new file mode 100644
index 0000000..e0528cd
--- /dev/null
+++ b/src/types/ChosenInlineResult.zig
@@ -0,0 +1,8 @@
+const Location = @import("Location.zig");
+const User = @import("User.zig");
+
+result_id: []const u8,
+from: User,
+location: ?Location = null,
+inline_message_id: ?[]const u8,
+query: []const u8,
diff --git a/src/types/Contact.zig b/src/types/Contact.zig
new file mode 100644
index 0000000..e3000fa
--- /dev/null
+++ b/src/types/Contact.zig
@@ -0,0 +1,5 @@
+phone_number: []const u8,
+first_name: []const u8,
+last_name: ?[]const u8 = null,
+user_id: ?[]u64 = null,
+vcard: ?[]const u8 = null,
diff --git a/src/types/Dice.zig b/src/types/Dice.zig
new file mode 100644
index 0000000..9aa6b06
--- /dev/null
+++ b/src/types/Dice.zig
@@ -0,0 +1,2 @@
+emoji: []const u8,
+value: u8,
diff --git a/src/types/Document.zig b/src/types/Document.zig
new file mode 100644
index 0000000..811273d
--- /dev/null
+++ b/src/types/Document.zig
@@ -0,0 +1,8 @@
+const PhotoSize = @import("PhotoSize.zig");
+
+file_id: []const u8,
+file_unique_id: []const u8,
+thumbnail: ?PhotoSize = null,
+file_name: ?[]const u8,
+mime_type: ?[]const u8,
+file_size: ?u64 = null,
diff --git a/src/types/EditMessageTextParams.zig b/src/types/EditMessageTextParams.zig
new file mode 100644
index 0000000..3e7701f
--- /dev/null
+++ b/src/types/EditMessageTextParams.zig
@@ -0,0 +1,16 @@
+const InlineKeyboardMarkup = @import("InlineKeyboardMarkup.zig");
+const LinkPreviewOptions = @import("LinkPreviewOptions.zig");
+const MessageEntity = @import("MessageEntity.zig");
+const ParseMode = @import("parse_mode.zig").ParseMode;
+
+business_connection_id: ?[]const u8 = null,
+// TODO: Integer or String
+chat_id: i64,
+message_id: u64,
+// TODO: Make a different call for this bcs it returns just true :D
+// inline_message_id: ?u64 = null,
+text: []const u8,
+parse_mode: ?ParseMode = null,
+entities: ?[]MessageEntity = null,
+link_preview_options: ?LinkPreviewOptions = null,
+reply_markup: ?InlineKeyboardMarkup = null,
diff --git a/src/types/EncryptedCredentials.zig b/src/types/EncryptedCredentials.zig
new file mode 100644
index 0000000..6c87689
--- /dev/null
+++ b/src/types/EncryptedCredentials.zig
@@ -0,0 +1,3 @@
+data: []const u8,
+hash: []const u8,
+secret: []const u8,
diff --git a/src/types/EncryptedPassportElement.zig b/src/types/EncryptedPassportElement.zig
new file mode 100644
index 0000000..ca0e2ed
--- /dev/null
+++ b/src/types/EncryptedPassportElement.zig
@@ -0,0 +1,30 @@
+// TODO: Turn this into a tagged union
+
+const PassportFile = @import("PassportFile.zig");
+
+pub const Type = enum {
+ personal_details,
+ passport,
+ driver_license,
+ identity_card,
+ internal_passport,
+ address,
+ utility_bill,
+ bank_statement,
+ rental_agreement,
+ passport_registration,
+ temporary_registration,
+ phone_number,
+ email,
+};
+
+type: Type,
+data: ?[]const u8,
+phone_number: ?[]const u8,
+email: ?[]const u8,
+files: ?[]PassportFile,
+front_side: ?PassportFile,
+reverse_side: ?PassportFile,
+selfie: ?PassportFile,
+translation: ?[]PassportFile,
+hash: []const u8,
diff --git a/src/types/ExternalReplyInfo.zig b/src/types/ExternalReplyInfo.zig
new file mode 100644
index 0000000..89aa004
--- /dev/null
+++ b/src/types/ExternalReplyInfo.zig
@@ -0,0 +1,47 @@
+const Animation = @import("Animation.zig");
+const Audio = @import("Audio.zig");
+const Chat = @import("Chat.zig");
+const Contact = @import("Contact.zig");
+const Dice = @import("Dice.zig");
+const Document = @import("Document.zig");
+const Game = @import("Game.zig");
+const Giveaway = @import("Giveaway.zig");
+const GiveawayWinners = @import("GiveawayWinners.zig");
+const Invoice = @import("Invoice.zig");
+const LinkPreviewOptions = @import("LinkPreviewOptions.zig");
+const Location = @import("Location.zig");
+const MessageOrigin = @import("message_origin.zig").MessageOrigin;
+const PaidMediaInfo = @import("PaidMediaInfo.zig");
+const Poll = @import("Poll.zig");
+const PhotoSize = @import("PhotoSize.zig");
+const Sticker = @import("Sticker.zig");
+const Story = @import("Story.zig");
+const Venue = @import("Venue.zig");
+const Video = @import("Video.zig");
+const VideoNote = @import("VideoNote.zig");
+const Voice = @import("Voice.zig");
+
+origin: MessageOrigin,
+chat: ?Chat = null,
+message_id: ?u64 = null,
+link_preview_options: ?LinkPreviewOptions = null,
+animation: ?Animation = null,
+audio: ?Audio = null,
+document: ?Document = null,
+paid_media: ?PaidMediaInfo = null,
+photo: ?[]PhotoSize = null,
+sticker: ?Sticker = null,
+story: ?Story = null,
+video: ?Video = null,
+video_note: ?VideoNote = null,
+voice: ?Voice = null,
+has_media_spoiler: bool = false,
+contact: ?Contact = null,
+dice: ?Dice = null,
+game: ?Game = null,
+giveaway: ?Giveaway = null,
+giveaway_winners: ?GiveawayWinners = null,
+invoice: ?Invoice = null,
+location: ?Location = null,
+poll: ?Poll = null,
+venue: ?Venue = null,
diff --git a/src/types/File.zig b/src/types/File.zig
new file mode 100644
index 0000000..3555bc9
--- /dev/null
+++ b/src/types/File.zig
@@ -0,0 +1,4 @@
+file_id: []const u8,
+file_unique_id: []const u8,
+file_size: ?u64 = null,
+file_path: ?[]const u8 = null,
diff --git a/src/types/ForumTopicClosed.zig b/src/types/ForumTopicClosed.zig
new file mode 100644
index 0000000..2f72c10
--- /dev/null
+++ b/src/types/ForumTopicClosed.zig
@@ -0,0 +1 @@
+// meant to be empty
diff --git a/src/types/ForumTopicCreated.zig b/src/types/ForumTopicCreated.zig
new file mode 100644
index 0000000..2429de7
--- /dev/null
+++ b/src/types/ForumTopicCreated.zig
@@ -0,0 +1,3 @@
+name: []const u8,
+icon_color: u24,
+icon_custom_emoji_id: ?[]const u8 = null,
diff --git a/src/types/ForumTopicEdited.zig b/src/types/ForumTopicEdited.zig
new file mode 100644
index 0000000..097acb3
--- /dev/null
+++ b/src/types/ForumTopicEdited.zig
@@ -0,0 +1,2 @@
+name: ?[]const u8 = null,
+icon_custom_emoji_id: ?[]const u8 = null,
diff --git a/src/types/ForumTopicReopened.zig b/src/types/ForumTopicReopened.zig
new file mode 100644
index 0000000..2f72c10
--- /dev/null
+++ b/src/types/ForumTopicReopened.zig
@@ -0,0 +1 @@
+// meant to be empty
diff --git a/src/types/Game.zig b/src/types/Game.zig
new file mode 100644
index 0000000..3738284
--- /dev/null
+++ b/src/types/Game.zig
@@ -0,0 +1,10 @@
+const Animation = @import("Animation.zig");
+const MessageEntity = @import("MessageEntity.zig");
+const PhotoSize = @import("PhotoSize.zig");
+
+title: []const u8,
+description: []const u8,
+photo: []PhotoSize,
+text: ?[]const u8 = null,
+text_entities: ?[]MessageEntity = null,
+animation: ?Animation = null,
diff --git a/src/types/GeneralForumTopicHidden.zig b/src/types/GeneralForumTopicHidden.zig
new file mode 100644
index 0000000..2f72c10
--- /dev/null
+++ b/src/types/GeneralForumTopicHidden.zig
@@ -0,0 +1 @@
+// meant to be empty
diff --git a/src/types/GeneralForumTopicUnhidden.zig b/src/types/GeneralForumTopicUnhidden.zig
new file mode 100644
index 0000000..2f72c10
--- /dev/null
+++ b/src/types/GeneralForumTopicUnhidden.zig
@@ -0,0 +1 @@
+// meant to be empty
diff --git a/src/types/GetMyNameParams.zig b/src/types/GetMyNameParams.zig
new file mode 100644
index 0000000..2cb38fa
--- /dev/null
+++ b/src/types/GetMyNameParams.zig
@@ -0,0 +1 @@
+language_code: ?[]const u8 = null
diff --git a/src/types/GetUpdatesParams.zig b/src/types/GetUpdatesParams.zig
new file mode 100644
index 0000000..0a4e333
--- /dev/null
+++ b/src/types/GetUpdatesParams.zig
@@ -0,0 +1,4 @@
+offset: ?u64 = null,
+limit: ?u64 = null,
+timeout: ?u64 = null,
+allowed_updates: ?[]const u8 = null,
diff --git a/src/types/Giveaway.zig b/src/types/Giveaway.zig
new file mode 100644
index 0000000..d1cfa7e
--- /dev/null
+++ b/src/types/Giveaway.zig
@@ -0,0 +1,10 @@
+const Chat = @import("Chat.zig");
+
+chats: []Chat,
+winners_selection_date: u64,
+winner_count: u64,
+only_new_members: bool = false,
+has_public_winners: bool = false,
+prize_description: ?[]const u8 = null,
+country_codes: ?[]const u8 = null,
+premium_subscription_month_count: ?u64 = null,
diff --git a/src/types/GiveawayCompleted.zig b/src/types/GiveawayCompleted.zig
new file mode 100644
index 0000000..9e07ad9
--- /dev/null
+++ b/src/types/GiveawayCompleted.zig
@@ -0,0 +1,5 @@
+const Message = @import("Message.zig");
+
+winner_count: u64,
+unclaimed_prize_count: ?u64 = null,
+giveaway_message: ?Message = null,
diff --git a/src/types/GiveawayCreated.zig b/src/types/GiveawayCreated.zig
new file mode 100644
index 0000000..2f72c10
--- /dev/null
+++ b/src/types/GiveawayCreated.zig
@@ -0,0 +1 @@
+// meant to be empty
diff --git a/src/types/GiveawayWinners.zig b/src/types/GiveawayWinners.zig
new file mode 100644
index 0000000..b99a7d2
--- /dev/null
+++ b/src/types/GiveawayWinners.zig
@@ -0,0 +1,14 @@
+const Chat = @import("Chat.zig");
+const User = @import("User.zig");
+
+chat: Chat,
+giveaway_message_id: u64,
+winners_selection_date: u64,
+winner_count: u64,
+winners: []User,
+additional_chat_count: ?u64 = null,
+premium_subscription_month_count: ?u64 = null,
+unclaimed_prize_count: ?u64 = null,
+only_new_members: bool = false,
+was_refunded: bool = false,
+prize_description: ?[]const u8 = null,
diff --git a/src/types/InlineKeyboardButton.zig b/src/types/InlineKeyboardButton.zig
new file mode 100644
index 0000000..be156b4
--- /dev/null
+++ b/src/types/InlineKeyboardButton.zig
@@ -0,0 +1,15 @@
+const CallbackGame = @import("CallbackGame.zig");
+const LoginUrl = @import("LoginUrl.zig");
+const SwitchInlineQueryChosenChat = @import("SwitchInlineQueryChosenChat.zig");
+const WebAppInfo = @import("WebAppInfo.zig");
+
+text: []const u8,
+url: ?[]const u8 = null,
+callback_data: ?[]const u8 = null,
+web_app: ?WebAppInfo = null,
+login_url: ?LoginUrl = null,
+switch_inline_query: ?[]const u8 = null,
+switch_inline_query_current_chat: ?[]const u8 = null,
+switch_inline_query_chosen_chat: ?SwitchInlineQueryChosenChat = null,
+callback_game: ?CallbackGame = null,
+pay: bool = false,
diff --git a/src/types/InlineKeyboardMarkup.zig b/src/types/InlineKeyboardMarkup.zig
new file mode 100644
index 0000000..388d4fc
--- /dev/null
+++ b/src/types/InlineKeyboardMarkup.zig
@@ -0,0 +1,3 @@
+const InlineKeyboardButton = @import("InlineKeyboardButton.zig");
+
+inline_keyboard: [][]InlineKeyboardButton,
diff --git a/src/types/InlineQuery.zig b/src/types/InlineQuery.zig
new file mode 100644
index 0000000..7cbbe20
--- /dev/null
+++ b/src/types/InlineQuery.zig
@@ -0,0 +1,17 @@
+const Location = @import("Location.zig");
+const User = @import("User.zig");
+
+pub const ChatType = enum {
+ sender,
+ private,
+ group,
+ supergroup,
+ channel,
+};
+
+id: []const u8,
+from: User,
+query: []const u8,
+offset: []const u8,
+chat_type: ?ChatType,
+location: ?Location,
diff --git a/src/types/Invoice.zig b/src/types/Invoice.zig
new file mode 100644
index 0000000..5ff6bfd
--- /dev/null
+++ b/src/types/Invoice.zig
@@ -0,0 +1,5 @@
+title: []const u8,
+description: []const u8,
+start_parameter: []const u8,
+currency: []const u8,
+total_amount: u64,
diff --git a/src/types/LinkPreviewOptions.zig b/src/types/LinkPreviewOptions.zig
new file mode 100644
index 0000000..c8258e7
--- /dev/null
+++ b/src/types/LinkPreviewOptions.zig
@@ -0,0 +1,5 @@
+is_disabled: ?bool = null,
+url: ?[]const u8 = null,
+prefer_small_media: ?bool = null,
+prefer_large_media: ?bool = null,
+show_above_text: ?bool = null,
diff --git a/src/types/Location.zig b/src/types/Location.zig
new file mode 100644
index 0000000..1fef4e3
--- /dev/null
+++ b/src/types/Location.zig
@@ -0,0 +1,6 @@
+latitude: f32,
+longitude: f32,
+horizontal_accuracy: ?f32 = null,
+live_period: ?u64 = null,
+heading: ?u64 = null,
+proximity_alert_radius: ?u64 = null,
diff --git a/src/types/LoginUrl.zig b/src/types/LoginUrl.zig
new file mode 100644
index 0000000..37b89f6
--- /dev/null
+++ b/src/types/LoginUrl.zig
@@ -0,0 +1,4 @@
+url: []const u8,
+forward_text: ?[]const u8 = null,
+bot_username: ?[]const u8 = null,
+request_write_access: ?[]const u8 = null,
diff --git a/src/types/MaskPosition.zig b/src/types/MaskPosition.zig
new file mode 100644
index 0000000..ba668c4
--- /dev/null
+++ b/src/types/MaskPosition.zig
@@ -0,0 +1,11 @@
+pub const Point = enum {
+ forehead,
+ eyes,
+ mouth,
+ chin,
+};
+
+point: Point,
+x_shift: f32,
+y_shift: f32,
+scale: f32,
diff --git a/src/types/Message.zig b/src/types/Message.zig
new file mode 100644
index 0000000..448ca86
--- /dev/null
+++ b/src/types/Message.zig
@@ -0,0 +1,139 @@
+const Animation = @import("Animation.zig");
+const Audio = @import("Audio.zig");
+const Chat = @import("Chat.zig");
+const ChatBackground = @import("ChatBackground.zig");
+const ChatBoostAdded = @import("ChatBoostAdded.zig");
+const ChatShared = @import("ChatShared.zig");
+const Contact = @import("Contact.zig");
+const Dice = @import("Dice.zig");
+const Document = @import("Document.zig");
+const ExternalReplyInfo = @import("ExternalReplyInfo.zig");
+const ForumTopicClosed = @import("ForumTopicClosed.zig");
+const ForumTopicCreated = @import("ForumTopicCreated.zig");
+const ForumTopicEdited = @import("ForumTopicEdited.zig");
+const ForumTopicReopened = @import("ForumTopicReopened.zig");
+const Game = @import("Game.zig");
+const GeneralForumTopicHidden = @import("GeneralForumTopicHidden.zig");
+const GeneralForumTopicUnhidden = @import("GeneralForumTopicUnhidden.zig");
+const Giveaway = @import("Giveaway.zig");
+const GiveawayCompleted = @import("GiveawayCompleted.zig");
+const GiveawayCreated = @import("GiveawayCreated.zig");
+const GiveawayWinners = @import("GiveawayWinners.zig");
+const InlineKeyboardMarkup = @import("InlineKeyboardMarkup.zig");
+const Invoice = @import("Invoice.zig");
+const LinkPreviewOptions = @import("LinkPreviewOptions.zig");
+const Location = @import("Location.zig");
+const MaybeInaccessibleMessage = @This();
+const Message = @This();
+const MessageAutoDeleteTimerChanged = @import("MessageAutoDeleteTimerChanged.zig");
+const MessageEntity = @import("MessageEntity.zig");
+const MessageOrigin = @import("message_origin.zig").MessageOrigin;
+const PaidMediaInfo = @import("PaidMediaInfo.zig");
+const PassportData = @import("PassportData.zig");
+const PhotoSize = @import("PhotoSize.zig");
+const Poll = @import("Poll.zig");
+const ProximityAlertTriggered = @import("ProximityAlertTriggered.zig");
+const RefundedPayment = @import("RefundedPayment.zig");
+const Sticker = @import("Sticker.zig");
+const Story = @import("Story.zig");
+const SuccessfulPayment = @import("SuccessfulPayment.zig");
+const TextQuote = @import("TextQuote.zig");
+const User = @import("User.zig");
+const UsersShared = @import("UsersShared.zig");
+const Venue = @import("Venue.zig");
+const Video = @import("Video.zig");
+const VideoChatEnded = @import("VideoChatEnded.zig");
+const VideoChatParticipantsInvited = @import("VideoChatParticipantsInvited.zig");
+const VideoChatScheduled = @import("VideoChatScheduled.zig");
+const VideoChatStarted = @import("VideoChatStarted.zig");
+const VideoNote = @import("VideoNote.zig");
+const Voice = @import("Voice.zig");
+const WebAppData = @import("WebAppData.zig");
+const WriteAccessAllowed = @import("WriteAccessAllowed.zig");
+
+message_id: u64,
+message_thread_id: ?u64 = null,
+from: ?User = null,
+sender_chat: ?Chat = null,
+sender_boost_count: ?u64 = null,
+sender_business_bot: ?User = null,
+// If this is a MaybeInaccessibleMessage this will be 0 if this is inaccessible
+date: u64,
+business_connection_id: ?[]const u8 = null,
+chat: Chat,
+forward_origin: ?MessageOrigin = null,
+is_topic_message: bool = false,
+is_automatic_forward: bool = false,
+reply_to_message: ?*Message = null,
+external_reply: ?ExternalReplyInfo = null,
+quote: ?TextQuote = null,
+reply_to_story: ?Story = null,
+via_bot: ?User = null,
+edit_date: ?u64 = null,
+has_protected_content: bool = false,
+is_from_offline: bool = false,
+media_group_id: ?[]const u8 = null,
+author_signature: ?[]const u8 = null,
+text: ?[]const u8 = null,
+entities: ?[]MessageEntity = null,
+link_preview_options: ?LinkPreviewOptions = null,
+effect_id: ?[]const u8 = null,
+animation: ?Animation = null,
+audio: ?Audio = null,
+document: ?Document = null,
+paid_media: ?PaidMediaInfo = null,
+photo: ?[]PhotoSize = null,
+sticker: ?Sticker = null,
+story: ?Story = null,
+video: ?Video = null,
+video_note: ?VideoNote = null,
+voice: ?Voice = null,
+caption: ?[]const u8 = null,
+caption_entities: ?[]MessageEntity = null,
+show_caption_above_media: bool = false,
+has_media_spoiler: bool = false,
+contact: ?Contact = null,
+dice: ?Dice = null,
+game: ?Game = null,
+poll: ?Poll = null,
+venue: ?Venue = null,
+location: ?Location = null,
+new_chat_members: ?[]User = null,
+left_chat_member: ?User = null,
+new_chat_title: ?[]const u8 = null,
+new_chat_photo: ?[]PhotoSize = null,
+delete_chat_photo: bool = false,
+group_chat_created: bool = false,
+supergroup_chat_created: bool = false,
+channel_chat_created: bool = false,
+message_auto_delete_timer_changed: ?MessageAutoDeleteTimerChanged = null,
+migrate_to_chat_id: ?i64 = null,
+migrate_from_chat_id: ?i64 = null,
+pinned_message: ?*MaybeInaccessibleMessage = null,
+invoice: ?Invoice = null,
+successful_payment: ?SuccessfulPayment = null,
+refunded_payment: ?RefundedPayment = null,
+users_shared: ?UsersShared = null,
+chat_shared: ?ChatShared = null,
+connected_website: ?[]const u8 = null,
+write_access_allowed: ?WriteAccessAllowed = null,
+passport_data: ?PassportData = null,
+proximity_alert_triggered: ?ProximityAlertTriggered = null,
+boost_added: ?ChatBoostAdded = null,
+chat_background_set: ?ChatBackground = null,
+forum_topic_created: ?ForumTopicCreated = null,
+forum_topic_edited: ?ForumTopicEdited = null,
+forum_topic_closed: ?ForumTopicClosed = null,
+forum_topic_reopened: ?ForumTopicReopened = null,
+general_forum_topic_hidden: ?GeneralForumTopicHidden = null,
+general_forum_topic_unhidden: ?GeneralForumTopicUnhidden = null,
+giveaway_created: ?GiveawayCreated = null,
+giveaway: ?Giveaway = null,
+giveaway_winners: ?GiveawayWinners = null,
+giveaway_completed: ?*GiveawayCompleted = null,
+video_chat_scheduled: ?VideoChatScheduled = null,
+video_chat_started: ?VideoChatStarted = null,
+video_chat_ended: ?VideoChatEnded = null,
+video_chat_participants_invited: ?VideoChatParticipantsInvited = null,
+web_app_data: ?WebAppData = null,
+reply_markup: ?InlineKeyboardMarkup = null,
diff --git a/src/types/MessageAutoDeleteTimerChanged.zig b/src/types/MessageAutoDeleteTimerChanged.zig
new file mode 100644
index 0000000..c73e682
--- /dev/null
+++ b/src/types/MessageAutoDeleteTimerChanged.zig
@@ -0,0 +1 @@
+message_auto_delete_time: u64,
diff --git a/src/types/MessageEntity.zig b/src/types/MessageEntity.zig
new file mode 100644
index 0000000..1c44d20
--- /dev/null
+++ b/src/types/MessageEntity.zig
@@ -0,0 +1,66 @@
+const std = @import("std");
+
+const MessageEntity = @This();
+const User = @import("User.zig");
+const Utf8View = std.unicode.Utf8View;
+
+pub const Type = enum {
+ mention,
+ hashtag,
+ cashtag,
+ bot_command,
+ url,
+ email,
+ phone_number,
+ bold,
+ italic,
+ underline,
+ strikethrough,
+ spoiler,
+ blockquote,
+ expandable_blockquote,
+ code,
+ pre,
+ text_link,
+ text_mention,
+ custom_emoji,
+};
+
+type: Type,
+offset: u64,
+length: u64,
+url: ?[]const u8 = null,
+user: ?User = null,
+language: ?[]const u8 = null,
+custom_emoji_id: ?[]const u8 = null,
+
+pub fn extract(self: MessageEntity, src: []const u8) ![]const u8 {
+ if (self.length == 0) {
+ return "";
+ }
+
+ var utf8 = (try Utf8View.init(src)).iterator();
+ var i: usize = 0;
+
+ const start = if (i >= self.offset)
+ utf8.i
+ else blk: {
+ while (utf8.nextCodepoint()) |cp| {
+ i += std.unicode.utf16CodepointSequenceLength(cp) catch unreachable;
+ if (i >= self.offset) {
+ break :blk utf8.i;
+ }
+ }
+ return "";
+ };
+
+ i = 0;
+ while (utf8.nextCodepoint()) |cp| {
+ i += std.unicode.utf16CodepointSequenceLength(cp) catch unreachable;
+ if (i >= self.length) {
+ return src[start..utf8.i];
+ }
+ }
+
+ return src[start..];
+}
diff --git a/src/types/MessageReactionCountUpdated.zig b/src/types/MessageReactionCountUpdated.zig
new file mode 100644
index 0000000..48a9f24
--- /dev/null
+++ b/src/types/MessageReactionCountUpdated.zig
@@ -0,0 +1,7 @@
+const Chat = @import("Chat.zig");
+const ReactionCount = @import("ReactionCount.zig");
+
+chat: Chat,
+message_id: u64,
+date: u64,
+reactions: []ReactionCount,
diff --git a/src/types/MessageReactionUpdated.zig b/src/types/MessageReactionUpdated.zig
new file mode 100644
index 0000000..7da679b
--- /dev/null
+++ b/src/types/MessageReactionUpdated.zig
@@ -0,0 +1,11 @@
+const Chat = @import("Chat.zig");
+const ReactionType = @import("reaction_type.zig").ReactionType;
+const User = @import("User.zig");
+
+chat: Chat,
+message_id: u64,
+user: ?User = null,
+actor_chat: ?Chat = null,
+date: u64,
+old_reaction: []ReactionType,
+new_reaction: []ReactionType,
diff --git a/src/types/OrderInfo.zig b/src/types/OrderInfo.zig
new file mode 100644
index 0000000..3f94376
--- /dev/null
+++ b/src/types/OrderInfo.zig
@@ -0,0 +1,6 @@
+const ShippingAddress = @import("ShippingAddress.zig");
+
+name: ?[]const u8 = null,
+phone_number: ?[]const u8 = null,
+email: ?[]const u8 = null,
+shipping_address: ?ShippingAddress = null,
diff --git a/src/types/PaidMediaInfo.zig b/src/types/PaidMediaInfo.zig
new file mode 100644
index 0000000..6de7447
--- /dev/null
+++ b/src/types/PaidMediaInfo.zig
@@ -0,0 +1,4 @@
+const PaidMedia = @import("paid_media.zig").PaidMedia;
+
+star_count: u64,
+paid_media: []PaidMedia,
diff --git a/src/types/PassportData.zig b/src/types/PassportData.zig
new file mode 100644
index 0000000..679534c
--- /dev/null
+++ b/src/types/PassportData.zig
@@ -0,0 +1,5 @@
+const EncryptedCredentials = @import("EncryptedCredentials.zig");
+const EncryptedPassportElement = @import("EncryptedPassportElement.zig");
+
+data: []EncryptedPassportElement,
+credentials: EncryptedCredentials,
diff --git a/src/types/PassportFile.zig b/src/types/PassportFile.zig
new file mode 100644
index 0000000..2b208fa
--- /dev/null
+++ b/src/types/PassportFile.zig
@@ -0,0 +1,4 @@
+file_id: []const u8,
+file_unique_id: []const u8,
+file_size: u64,
+file_date: u64,
diff --git a/src/types/PhotoSize.zig b/src/types/PhotoSize.zig
new file mode 100644
index 0000000..887b530
--- /dev/null
+++ b/src/types/PhotoSize.zig
@@ -0,0 +1,5 @@
+file_id: []const u8,
+file_unique_id: []const u8,
+width: u64,
+height: u64,
+file_size: ?u64 = null,
diff --git a/src/types/Poll.zig b/src/types/Poll.zig
new file mode 100644
index 0000000..ccc3b68
--- /dev/null
+++ b/src/types/Poll.zig
@@ -0,0 +1,22 @@
+const MessageEntity = @import("MessageEntity.zig");
+const PollOption = @import("PollOption.zig");
+
+pub const Type = enum {
+ regular,
+ quiz,
+};
+
+id: []const u8,
+question: []const u8,
+question_entities: ?[]MessageEntity = null,
+options: []PollOption,
+total_voter_count: u64,
+is_closed: bool,
+is_anonymous: bool,
+type: Type,
+allows_multiple_answers: bool,
+correct_option_id: ?u64 = null,
+explanation: ?[]const u8 = null,
+explanation_entities: ?[]MessageEntity = null,
+open_period: ?u64 = null,
+close_date: ?u64 = null,
diff --git a/src/types/PollAnswer.zig b/src/types/PollAnswer.zig
new file mode 100644
index 0000000..7d4985c
--- /dev/null
+++ b/src/types/PollAnswer.zig
@@ -0,0 +1,7 @@
+const Chat = @import("Chat.zig");
+const User = @import("User.zig");
+
+poll_id: []const u8,
+voter_chat: ?Chat,
+user: ?User,
+option_ids: []u64,
diff --git a/src/types/PollOption.zig b/src/types/PollOption.zig
new file mode 100644
index 0000000..870bfee
--- /dev/null
+++ b/src/types/PollOption.zig
@@ -0,0 +1,5 @@
+const MessageEntity = @import("MessageEntity.zig");
+
+text: []const u8,
+text_entities: ?[]MessageEntity = null,
+voter_count: u64,
diff --git a/src/types/PreCheckoutQuery.zig b/src/types/PreCheckoutQuery.zig
new file mode 100644
index 0000000..48e013f
--- /dev/null
+++ b/src/types/PreCheckoutQuery.zig
@@ -0,0 +1,10 @@
+const OrderInfo = @import("OrderInfo.zig");
+const User = @import("User.zig");
+
+id: []const u8,
+from: User,
+currency: []const u8,
+total_amount: u64,
+invoice_payload: []const u8,
+shipping_option_id: ?[]const u8,
+order_info: ?OrderInfo,
diff --git a/src/types/ProximityAlertTriggered.zig b/src/types/ProximityAlertTriggered.zig
new file mode 100644
index 0000000..db5159d
--- /dev/null
+++ b/src/types/ProximityAlertTriggered.zig
@@ -0,0 +1,5 @@
+const User = @import("User.zig");
+
+traveler: User,
+watcher: User,
+distance: u64,
diff --git a/src/types/ReactionCount.zig b/src/types/ReactionCount.zig
new file mode 100644
index 0000000..7c6a0bc
--- /dev/null
+++ b/src/types/ReactionCount.zig
@@ -0,0 +1,4 @@
+const ReactionType = @import("reaction_type.zig").ReactionType;
+
+type: ReactionType,
+total_count: u64,
diff --git a/src/types/RefundedPayment.zig b/src/types/RefundedPayment.zig
new file mode 100644
index 0000000..31f04c0
--- /dev/null
+++ b/src/types/RefundedPayment.zig
@@ -0,0 +1,5 @@
+currency: []const u8,
+total_amount: u64,
+invoice_payload: []const u8,
+telegram_payment_charge_id: []const u8,
+provider_payment_charge_id: []const u8,
diff --git a/src/types/ReplyParameters.zig b/src/types/ReplyParameters.zig
new file mode 100644
index 0000000..57d75c2
--- /dev/null
+++ b/src/types/ReplyParameters.zig
@@ -0,0 +1,9 @@
+message_id: u64,
+// TODO: Integer OR String
+chat_id: ?i64 = null,
+allow_sending_without_reply: ?bool = null,
+quote: ?[]const u8 = null,
+// one of quote_parse_mode or quote_entities
+quote_parse_mode: ?[]const u8 = null,
+quote_entities: ?[]const u8 = null,
+quote_position: ?u64 = null,
diff --git a/src/types/ResponseParameters.zig b/src/types/ResponseParameters.zig
new file mode 100644
index 0000000..655c4f9
--- /dev/null
+++ b/src/types/ResponseParameters.zig
@@ -0,0 +1,2 @@
+migrate_to_chat_id: ?i64 = null,
+retry_after: ?i64 = null,
diff --git a/src/types/SendMessageParams.zig b/src/types/SendMessageParams.zig
new file mode 100644
index 0000000..8c84940
--- /dev/null
+++ b/src/types/SendMessageParams.zig
@@ -0,0 +1,18 @@
+const LinkPreviewOptions = @import("LinkPreviewOptions.zig");
+const MessageEntity = @import("MessageEntity.zig");
+const ParseMode = @import("parse_mode.zig").ParseMode;
+const ReplyParameters = @import("ReplyParameters.zig");
+
+business_connection_id: ?[]const u8 = null,
+// TODO: Integer or String
+chat_id: i64,
+message_thread_id: ?u64 = null,
+text: []const u8,
+parse_mode: ?ParseMode = null,
+entities: ?[]MessageEntity = null,
+link_preview_options: ?LinkPreviewOptions = null,
+disable_notification: ?bool = null,
+protect_content: ?bool = null,
+message_effect_id: ?[]const u8 = null,
+reply_parameters: ?ReplyParameters = null,
+// TODO: reply_markup: InlineKeyboardMarkup OR ReplyKeyboardMarkup OR ReplyKeyboardRemove OR ForceReply
diff --git a/src/types/SetMyNameParams.zig b/src/types/SetMyNameParams.zig
new file mode 100644
index 0000000..0bd2f06
--- /dev/null
+++ b/src/types/SetMyNameParams.zig
@@ -0,0 +1,2 @@
+name: ?[]const u8 = null,
+language_code: ?[]const u8 = null,
diff --git a/src/types/SharedUser.zig b/src/types/SharedUser.zig
new file mode 100644
index 0000000..4afe053
--- /dev/null
+++ b/src/types/SharedUser.zig
@@ -0,0 +1,7 @@
+const PhotoSize = @import("PhotoSize.zig");
+
+user_id: u64,
+first_name: ?[]const u8 = null,
+last_name: ?[]const u8 = null,
+username: ?[]const u8 = null,
+photo: ?[]PhotoSize = null,
diff --git a/src/types/ShippingAddress.zig b/src/types/ShippingAddress.zig
new file mode 100644
index 0000000..f4203fe
--- /dev/null
+++ b/src/types/ShippingAddress.zig
@@ -0,0 +1,6 @@
+country_code: []const u8,
+state: []const u8,
+city: []const u8,
+street_line1: []const u8,
+street_line2: []const u8,
+post_code: []const u8,
diff --git a/src/types/ShippingQuery.zig b/src/types/ShippingQuery.zig
new file mode 100644
index 0000000..15abcda
--- /dev/null
+++ b/src/types/ShippingQuery.zig
@@ -0,0 +1,7 @@
+const ShippingAddress = @import("ShippingAddress.zig");
+const User = @import("User.zig");
+
+id: []const u8,
+from: User,
+invoice_payload: []const u8,
+shipping_address: ShippingAddress,
diff --git a/src/types/Sticker.zig b/src/types/Sticker.zig
new file mode 100644
index 0000000..e28df69
--- /dev/null
+++ b/src/types/Sticker.zig
@@ -0,0 +1,25 @@
+const File = @import("File.zig");
+const MaskPosition = @import("MaskPosition.zig");
+const PhotoSize = @import("PhotoSize.zig");
+
+pub const Type = enum {
+ regular,
+ mask,
+ custom_emoji,
+};
+
+file_id: []const u8,
+file_unique_id: []const u8,
+type: Type,
+width: u64,
+height: u64,
+is_animated: bool = false,
+is_video: bool = false,
+thumbnail: ?PhotoSize = null,
+emoji: ?[]const u8 = null,
+set_name: ?[]const u8 = null,
+premium_animation: ?File = null,
+mask_position: ?MaskPosition = null,
+custom_emoji_id: ?[]const u8 = null,
+needs_repainting: bool = false,
+file_size: ?u64 = null,
diff --git a/src/types/Story.zig b/src/types/Story.zig
new file mode 100644
index 0000000..479b7a9
--- /dev/null
+++ b/src/types/Story.zig
@@ -0,0 +1,4 @@
+const Chat = @import("Chat.zig");
+
+chat: Chat,
+id: u64,
diff --git a/src/types/SuccessfulPayment.zig b/src/types/SuccessfulPayment.zig
new file mode 100644
index 0000000..c508f48
--- /dev/null
+++ b/src/types/SuccessfulPayment.zig
@@ -0,0 +1,9 @@
+const OrderInfo = @import("OrderInfo.zig");
+
+currency: []const u8,
+total_amount: u64,
+invoice_payload: []const u8,
+shipping_option_id: ?[]const u8 = null,
+order_info: ?OrderInfo = null,
+telegram_payment_charge_id: []const u8,
+provider_payment_charge_id: []const u8,
diff --git a/src/types/SwitchInlineQueryChosenChat.zig b/src/types/SwitchInlineQueryChosenChat.zig
new file mode 100644
index 0000000..860f2d9
--- /dev/null
+++ b/src/types/SwitchInlineQueryChosenChat.zig
@@ -0,0 +1,5 @@
+query: ?[]const u8,
+allow_user_chats: ?bool = null,
+allow_bot_chats: ?bool = null,
+allow_group_chats: ?bool = null,
+allow_channel_chats: ?bool = null,
diff --git a/src/types/TextQuote.zig b/src/types/TextQuote.zig
new file mode 100644
index 0000000..6dc6be2
--- /dev/null
+++ b/src/types/TextQuote.zig
@@ -0,0 +1,6 @@
+const MessageEntity = @import("MessageEntity.zig");
+
+text: []const u8,
+entities: ?[]MessageEntity = null,
+position: u64,
+is_manual: bool = false,
diff --git a/src/types/Update.zig b/src/types/Update.zig
new file mode 100644
index 0000000..0491110
--- /dev/null
+++ b/src/types/Update.zig
@@ -0,0 +1,41 @@
+const BusinessConnection = @import("BusinessConnection.zig");
+const BusinessMessagesDeleted = @import("BusinessMessagesDeleted.zig");
+const CallbackQuery = @import("CallbackQuery.zig");
+const ChatBoostRemoved = @import("ChatBoostRemoved.zig");
+const ChatBoostUpdated = @import("ChatBoostUpdated.zig");
+const ChatJoinRequest = @import("ChatJoinRequest.zig");
+const ChatMemberUpdated = @import("ChatMemberUpdated.zig");
+const ChosenInlineResult = @import("ChosenInlineResult.zig");
+const InlineQuery = @import("InlineQuery.zig");
+const Message = @import("Message.zig");
+const MessageReactionCountUpdated = @import("MessageReactionCountUpdated.zig");
+const MessageReactionUpdated = @import("MessageReactionUpdated.zig");
+const Poll = @import("Poll.zig");
+const PollAnswer = @import("PollAnswer.zig");
+const PreCheckoutQuery = @import("PreCheckoutQuery.zig");
+const ShippingQuery = @import("ShippingQuery.zig");
+
+// TODO: Make this into a tagged union
+update_id: u64,
+message: ?Message = null,
+edited_message: ?Message = null,
+channel_post: ?Message = null,
+edited_channel_post: ?Message = null,
+business_connection: ?BusinessConnection = null,
+business_message: ?Message = null,
+edited_business_message: ?Message = null,
+deleted_business_messages: ?BusinessMessagesDeleted = null,
+message_reaction: ?MessageReactionUpdated = null,
+message_reaction_count: ?MessageReactionCountUpdated = null,
+inline_query: ?InlineQuery = null,
+chosen_inline_result: ?ChosenInlineResult = null,
+callback_query: ?CallbackQuery = null,
+shipping_query: ?ShippingQuery = null,
+pre_checkout_query: ?PreCheckoutQuery = null,
+poll: ?Poll = null,
+poll_answer: ?PollAnswer = null,
+my_chat_member: ?ChatMemberUpdated = null,
+chat_member: ?ChatMemberUpdated = null,
+chat_join_request: ?ChatJoinRequest = null,
+chat_boost: ?ChatBoostUpdated = null,
+removed_chat_boost: ?ChatBoostRemoved = null,
diff --git a/src/types/User.zig b/src/types/User.zig
new file mode 100644
index 0000000..dc06097
--- /dev/null
+++ b/src/types/User.zig
@@ -0,0 +1,32 @@
+const textutils = @import("../textutils.zig");
+
+const User = @This();
+
+id: i64,
+is_bot: bool,
+first_name: []const u8,
+last_name: ?[]const u8 = null,
+username: ?[]const u8 = null,
+language_code: ?[]const u8 = null,
+is_premium: bool = false,
+added_to_attachment_menu: bool = false,
+can_join_groups: bool = false,
+can_read_all_group_messages: bool = false,
+supports_inline_queries: bool = false,
+can_connect_to_business: bool = false,
+
+pub fn writeFormattedName(self: User, w: anytype) !void {
+ try w.print("", .{self.id});
+ try textutils.escapeXml(w, self.first_name);
+ if (self.last_name) |last_name| {
+ try w.writeByte(' ');
+ try textutils.escapeXml(w, last_name);
+ }
+ try w.writeAll("");
+
+ if (self.username) |username| {
+ try w.writeAll(" @");
+ try textutils.escapeXml(w, username);
+ }
+ try w.print(" [{}]", .{self.id});
+}
diff --git a/src/types/UsersShared.zig b/src/types/UsersShared.zig
new file mode 100644
index 0000000..0fff785
--- /dev/null
+++ b/src/types/UsersShared.zig
@@ -0,0 +1,4 @@
+const SharedUser = @import("SharedUser.zig");
+
+request_id: u64,
+users: []SharedUser,
diff --git a/src/types/Venue.zig b/src/types/Venue.zig
new file mode 100644
index 0000000..6ae61f3
--- /dev/null
+++ b/src/types/Venue.zig
@@ -0,0 +1,9 @@
+const Location = @import("Location.zig");
+
+location: Location,
+title: []const u8,
+address: []const u8,
+foursquare_id: ?[]const u8 = null,
+foursquare_type: ?[]const u8 = null,
+google_place_id: ?[]const u8 = null,
+google_place_type: ?[]const u8 = null,
diff --git a/src/types/Video.zig b/src/types/Video.zig
new file mode 100644
index 0000000..8330637
--- /dev/null
+++ b/src/types/Video.zig
@@ -0,0 +1,11 @@
+const PhotoSize = @import("PhotoSize.zig");
+
+file_id: []const u8,
+file_unique_id: []const u8,
+width: u64,
+height: u64,
+duration: u64,
+thumbnail: ?PhotoSize = null,
+file_name: ?[]const u8 = null,
+mime_type: ?[]const u8 = null,
+file_size: ?u64 = null,
diff --git a/src/types/VideoChatEnded.zig b/src/types/VideoChatEnded.zig
new file mode 100644
index 0000000..748bf44
--- /dev/null
+++ b/src/types/VideoChatEnded.zig
@@ -0,0 +1 @@
+duration: u64,
diff --git a/src/types/VideoChatParticipantsInvited.zig b/src/types/VideoChatParticipantsInvited.zig
new file mode 100644
index 0000000..22a46f7
--- /dev/null
+++ b/src/types/VideoChatParticipantsInvited.zig
@@ -0,0 +1,3 @@
+const User = @import("User.zig");
+
+users: []User,
diff --git a/src/types/VideoChatScheduled.zig b/src/types/VideoChatScheduled.zig
new file mode 100644
index 0000000..a55dfe3
--- /dev/null
+++ b/src/types/VideoChatScheduled.zig
@@ -0,0 +1 @@
+start_date: u64,
diff --git a/src/types/VideoChatStarted.zig b/src/types/VideoChatStarted.zig
new file mode 100644
index 0000000..2f72c10
--- /dev/null
+++ b/src/types/VideoChatStarted.zig
@@ -0,0 +1 @@
+// meant to be empty
diff --git a/src/types/VideoNote.zig b/src/types/VideoNote.zig
new file mode 100644
index 0000000..aadb318
--- /dev/null
+++ b/src/types/VideoNote.zig
@@ -0,0 +1,8 @@
+const PhotoSize = @import("PhotoSize.zig");
+
+file_id: []const u8,
+file_unique_id: []const u8,
+length: u64,
+duration: u64,
+thumbnail: ?PhotoSize = null,
+file_size: ?u64 = null,
diff --git a/src/types/Voice.zig b/src/types/Voice.zig
new file mode 100644
index 0000000..609ee0b
--- /dev/null
+++ b/src/types/Voice.zig
@@ -0,0 +1,5 @@
+file_id: []const u8,
+file_unique_id: []const u8,
+duration: u64,
+mime_type: ?[]const u8 = null,
+file_size: ?u64 = null,
diff --git a/src/types/WebAppData.zig b/src/types/WebAppData.zig
new file mode 100644
index 0000000..e853fdc
--- /dev/null
+++ b/src/types/WebAppData.zig
@@ -0,0 +1,2 @@
+data: []const u8,
+button_text: []const u8,
diff --git a/src/types/WebAppInfo.zig b/src/types/WebAppInfo.zig
new file mode 100644
index 0000000..02fcc5e
--- /dev/null
+++ b/src/types/WebAppInfo.zig
@@ -0,0 +1 @@
+url: []const u8,
diff --git a/src/types/WriteAccessAllowed.zig b/src/types/WriteAccessAllowed.zig
new file mode 100644
index 0000000..2ff3259
--- /dev/null
+++ b/src/types/WriteAccessAllowed.zig
@@ -0,0 +1,3 @@
+from_request: ?bool = null,
+web_app_name: ?[]const u8 = null,
+from_attachment_menu: ?bool = null,
diff --git a/src/types/background_fill.zig b/src/types/background_fill.zig
new file mode 100644
index 0000000..86aaa59
--- /dev/null
+++ b/src/types/background_fill.zig
@@ -0,0 +1,17 @@
+const json = @import("../json.zig");
+
+pub const BackgroundFill = union(enum) {
+ solid: struct {
+ color: u24,
+ },
+ gradient: struct {
+ top_color: u24,
+ bottom_color: u24,
+ rotation_angle: u16,
+ },
+ freeform_gradient: struct {
+ colors: []const u24,
+ },
+
+ pub const jsonParse = json.makeJsonParse(BackgroundFill);
+};
diff --git a/src/types/background_type.zig b/src/types/background_type.zig
new file mode 100644
index 0000000..220465a
--- /dev/null
+++ b/src/types/background_type.zig
@@ -0,0 +1,30 @@
+const json = @import("../json.zig");
+
+const BackgroundFill = @import("background_fill.zig").BackgroundFill;
+const Document = @import("Document.zig");
+
+pub const BackgroundType = union(enum) {
+ fill: struct {
+ fill: BackgroundFill,
+ dark_theme_dimming: u8,
+ },
+ wallpaper: struct {
+ document: Document,
+ dark_theme_dimming: u8,
+ is_blurred: bool = false,
+ is_moving: bool = false,
+ },
+ pattern: struct {
+ document: Document,
+ fill: BackgroundFill,
+ intensity: u8,
+ is_inverted: bool = false,
+ is_moving: bool = false,
+ },
+ chat_theme: struct {
+ theme_name: []const u8,
+ },
+
+ pub const jsonParse = json.makeJsonParse(BackgroundType);
+ pub const jsonParseFromValue = json.makeJsonParseFromValue(BackgroundType);
+};
diff --git a/src/types/chat_boost_source.zig b/src/types/chat_boost_source.zig
new file mode 100644
index 0000000..ead19a0
--- /dev/null
+++ b/src/types/chat_boost_source.zig
@@ -0,0 +1,20 @@
+const json = @import("../json.zig");
+
+const User = @import("User.zig");
+
+pub const ChatBoostSource = union(enum) {
+ premium: struct {
+ user: User,
+ },
+ gift_code: struct {
+ user: User,
+ },
+ giveaway: struct {
+ giveaway_message_id: u64,
+ user: ?User = null,
+ is_unclaimed: bool = false,
+ },
+
+ pub const jsonParse = json.makeJsonParse(ChatBoostSource);
+ pub const jsonParseFromValue = json.makeJsonParseFromValue(ChatBoostSource);
+};
diff --git a/src/types/chat_member.zig b/src/types/chat_member.zig
new file mode 100644
index 0000000..7650299
--- /dev/null
+++ b/src/types/chat_member.zig
@@ -0,0 +1,63 @@
+const json = @import("../json.zig");
+
+const User = @import("User.zig");
+
+pub const ChatMember = union(enum) {
+ creator: struct {
+ user: User,
+ is_anonymous: bool,
+ custom_title: ?[]const u8 = null,
+ },
+ administrator: struct {
+ user: User,
+ can_be_edited: bool,
+ is_anonymous: bool,
+ can_manage_chat: bool,
+ can_delete_messages: bool,
+ can_manage_video_chats: bool,
+ can_restrict_members: bool,
+ can_promote_members: bool,
+ can_change_info: bool,
+ can_invite_users: bool,
+ can_post_stories: bool,
+ can_edit_stories: bool,
+ can_delete_stories: bool,
+ can_post_messages: ?bool = null,
+ can_edit_messages: ?bool = null,
+ can_pin_messages: ?bool = null,
+ can_manage_topics: ?bool = null,
+ custom_title: ?[]const u8 = null,
+ },
+ member: struct {
+ user: User,
+ },
+ restricted: struct {
+ user: User,
+ is_member: bool,
+ can_send_messages: bool,
+ can_send_audios: bool,
+ can_send_documents: bool,
+ can_send_photos: bool,
+ can_send_videos: bool,
+ can_send_video_notes: bool,
+ can_send_voice_notes: bool,
+ can_send_polls: bool,
+ can_send_other_messages: bool,
+ can_add_web_page_previews: bool,
+ can_change_info: bool,
+ can_invite_users: bool,
+ can_pin_messages: bool,
+ can_manage_topics: bool,
+ until_date: u64,
+ },
+ left: struct {
+ user: User,
+ },
+ banned: struct {
+ user: User,
+ until_date: u64,
+ },
+
+ pub const jsonParse = json.makeJsonParse(ChatMember);
+ pub const jsonParseFromValue = json.makeJsonParseFromValueWithTag(ChatMember, "status");
+};
diff --git a/src/types/message_origin.zig b/src/types/message_origin.zig
new file mode 100644
index 0000000..5ca1f9f
--- /dev/null
+++ b/src/types/message_origin.zig
@@ -0,0 +1,29 @@
+const json = @import("../json.zig");
+
+const Chat = @import("Chat.zig");
+const User = @import("User.zig");
+
+pub const MessageOrigin = union(enum) {
+ user: struct {
+ date: u64,
+ sender_user: User,
+ },
+ hidden_user: struct {
+ date: u64,
+ sender_user_name: []const u8,
+ },
+ chat: struct {
+ date: u64,
+ sender_chat: Chat,
+ author_signature: ?[]const u8,
+ },
+ channel: struct {
+ date: u64,
+ chat: Chat,
+ message_id: u64,
+ author_signature: ?[]const u8,
+ },
+
+ pub const jsonParse = json.makeJsonParse(MessageOrigin);
+ pub const jsonParseFromValue = json.makeJsonParseFromValue(MessageOrigin);
+};
diff --git a/src/types/paid_media.zig b/src/types/paid_media.zig
new file mode 100644
index 0000000..3b50250
--- /dev/null
+++ b/src/types/paid_media.zig
@@ -0,0 +1,21 @@
+const json = @import("../json.zig");
+
+const PhotoSize = @import("PhotoSize.zig");
+const Video = @import("Video.zig");
+
+pub const PaidMedia = union(enum) {
+ preview: struct {
+ width: ?u64 = null,
+ height: ?u64 = null,
+ duration: ?u64 = null,
+ },
+ photo: struct {
+ photo: []PhotoSize,
+ },
+ video: struct {
+ video: Video,
+ },
+
+ pub const jsonParse = json.makeJsonParse(PaidMedia);
+ pub const jsonParseFromValue = json.makeJsonParseFromValue(PaidMedia);
+};
diff --git a/src/types/parse_mode.zig b/src/types/parse_mode.zig
new file mode 100644
index 0000000..7285c64
--- /dev/null
+++ b/src/types/parse_mode.zig
@@ -0,0 +1,5 @@
+pub const ParseMode = enum {
+ markdownv2,
+ html,
+ markdown,
+};
diff --git a/src/types/reaction_type.zig b/src/types/reaction_type.zig
new file mode 100644
index 0000000..416def9
--- /dev/null
+++ b/src/types/reaction_type.zig
@@ -0,0 +1,13 @@
+const json = @import("../json.zig");
+
+pub const ReactionType = union(enum) {
+ emoji: struct {
+ emoji: []const u8,
+ },
+ custom_emoji: struct {
+ custom_emoji_id: []const u8,
+ },
+
+ pub const jsonParse = json.makeJsonParse(ReactionType);
+ pub const jsonParseFromValue = json.makeJsonParseFromValue(ReactionType);
+};
--
cgit v1.2.3