#ifndef TELEBOTXX_ATTACHMENT_HPP #define TELEBOTXX_ATTACHMENT_HPP #include #include #include #include #include namespace telebotxx { class PhotoSize { public: PhotoSize(); const std::string& getFileId() const; void setFileId(const std::string& fileId); int getWidth() const; void setWidth(int width); int getHeight() const; void setHeight(int height); const std::optional& getFileSize() const; void setFileSize(std::optional fileSize); private: std::string fileId_; int width_; int height_; std::optional fileSize_; }; using PhotoSizeArray = std::vector; class Audio { public: Audio(); const std::string& getFileId() const; void setFileId(const std::string& fileId); int getDuration() const; void setDuration(int duration); const std::optional& getPerformer() const; void setPerformer(std::optional performer); const std::optional& getTitle() const; void setTitle(std::optional title); const std::optional& getMimeType() const; void setMimeType(std::optional mimeType); const std::optional& getFileSize() const; void setFileSize(std::optional fileSize); private: std::string fileId_; int duration_; std::optional performer_; std::optional title_; std::optional mimeType_; std::optional fileSize_; }; class Document { public: Document(); const std::string& getFileId() const; void setFileId(std::string fileId); const std::optional& getThumb() const; void setThumb(std::optional thumb); const std::optional& getFileName() const; void setFileName(std::optional fileName); const std::optional& getMimeType() const; void setMimeType(std::optional mimeType); const std::optional& getFileSize() const; void setFileSize(std::optional fileSize); private: std::string fileId_; std::optional thumb_; std::optional fileName_; std::optional mimeType_; std::optional fileSize_; }; class Sticker { public: Sticker(); const std::string& getFileId() const; void setFileId(const std::string& fileId); int getWidth() const; void setWidth(int width); int getHeight() const; void setHeight(int height); const std::optional& getThumb() const; void setThumb(std::optional thumb); const std::optional& getEmoji() const; void setEmoji(std::optional emoji); const std::optional& getFileSize() const; void setFileSize(std::optional fileSize); private: std::string fileId_; int width_; int height_; std::optional thumb_; std::optional emoji_; std::optional fileSize_; }; class Attachment { public: enum class Type { Audio, Document, Game, PhotoSizeArray, Sticker, Video, Voice, Contact, Location, Venue }; Attachment(PhotoSizeArray); Attachment(Audio); Attachment(Document); Attachment(Sticker); Type getType() const; const PhotoSizeArray& getPhotoSizeArray() const; const Audio& getAudio() const; const Document& getDocument() const; const Sticker& getSticker() const; private: Type type_; std::variant value_; }; } // namespace telebotxx #endif // TELEBOTXX_ATTACHMENT_HPP