<commit_before>#ifndef TGBOT_TYPES_H
#define TGBOT_TYPES_H

#include <string>
#include <vector>
#include <memory>
#include "utils/matrix.h"

namespace Json {
    struct Value;
}

namespace tgbot {
	/*!
	 * @brief API-interacting types
	 */
	namespace types {

		/*!
		 * @typedef Ptr, a unique smart pointer alias
		 */
		template <typename _Ty>
			using Ptr = std::unique_ptr<_Ty>;

		struct Message; //forward declaration

		enum class UpdateType {
			MESSAGE,
			EDITED_MESSAGE,
			EDITED_CHANNEL_POST,
			INLINE_QUERY,
			CHOSEN_INLINE_RESULT,
			CALLBACK_QUERY,
			SHIPPING_QUERY,
			PRE_CHECKOUT_QUERY,
            CHANNEL_POST
		};

        enum class ChatType {
            PRIVATE,
            GROUP,
            SUPERGROUP,
            CHANNEL
        };

        enum class MessageEntityType {
        	MENTION,
        	HASHTAG,
        	BOT_COMMAND,
        	URL,
        	EMAIL,
        	BOLD,
        	ITALIC,
        	CODE,
        	PRE,
        	TEXT_LINK,
        	TEXT_MENTION
        };

		struct User {
			public:
				explicit User(const Json::Value& object);
				std::string firstName;
				Ptr<std::string> lastName;
				Ptr<std::string> username;
				Ptr<std::string> languageCode;
				int id;
				bool isBot : 1;
		};

		struct ChatPhoto {
			public:
				explicit ChatPhoto(const Json::Value &object);
				std::string smallFileId;
				std::string bigFileId;
		};

		struct MessageEntity {
			public:
				explicit MessageEntity(const Json::Value &object);
				Ptr<User> user;
				Ptr<std::string> url;
				int offset;
				int length;
				MessageEntityType type;
		};

		struct Audio {
			public:
				explicit Audio(const Json::Value &object);
				std::string fileId;
				Ptr<std::string> performer;
				Ptr<std::string> title;
				Ptr<std::string> mimeType;
				int fileSize;
				int duration;
		};

		struct PhotoSize {
			public:
				explicit PhotoSize(const Json::Value &object);
				std::string fileId;
				int fileSize;
				int width;
				int height;
		};

		struct Document {
			public:
				explicit Document(const Json::Value &object);
				std::string fileId;
				Ptr<PhotoSize> thumb;
				Ptr<std::string> fileName;
				Ptr<std::string> mimeType;
				int fileSize;
		};

		struct Voice {<commit_msg>PhotoSize()<commit_after>#ifndef TGBOT_TYPES_H
#define TGBOT_TYPES_H

#include <string>
#include <vector>
#include <memory>
#include "utils/matrix.h"

namespace Json {
    struct Value;
}

namespace tgbot {
	/*!
	 * @brief API-interacting types
	 */
	namespace types {

		/*!
		 * @typedef Ptr, a unique smart pointer alias
		 */
		template <typename _Ty>
			using Ptr = std::unique_ptr<_Ty>;

		struct Message; //forward declaration

		enum class UpdateType {
			MESSAGE,
			EDITED_MESSAGE,
			EDITED_CHANNEL_POST,
			INLINE_QUERY,
			CHOSEN_INLINE_RESULT,
			CALLBACK_QUERY,
			SHIPPING_QUERY,
			PRE_CHECKOUT_QUERY,
            CHANNEL_POST
		};

        enum class ChatType {
            PRIVATE,
            GROUP,
            SUPERGROUP,
            CHANNEL
        };

        enum class MessageEntityType {
        	MENTION,
        	HASHTAG,
        	BOT_COMMAND,
        	URL,
        	EMAIL,
        	BOLD,
        	ITALIC,
        	CODE,
        	PRE,
        	TEXT_LINK,
        	TEXT_MENTION
        };

		struct User {
			public:
				explicit User(const Json::Value& object);
				std::string firstName;
				Ptr<std::string> lastName;
				Ptr<std::string> username;
				Ptr<std::string> languageCode;
				int id;
				bool isBot : 1;
		};

		struct ChatPhoto {
			public:
				explicit ChatPhoto(const Json::Value &object);
				std::string smallFileId;
				std::string bigFileId;
		};

		struct MessageEntity {
			public:
				explicit MessageEntity(const Json::Value &object);
				Ptr<User> user;
				Ptr<std::string> url;
				int offset;
				int length;
				MessageEntityType type;
		};

		struct Audio {
			public:
				explicit Audio(const Json::Value &object);
				std::string fileId;
				Ptr<std::string> performer;
				Ptr<std::string> title;
				Ptr<std::string> mimeType;
				int fileSize;
				int duration;
		};

		struct PhotoSize {
			public:
                PhotoSize() = default;
				explicit PhotoSize(const Json::Value &object);
				std::string fileId;
				int fileSize;
				int width;
				int height;
		};

		struct Document {
			public:
				explicit Document(const Json::Value &object);
				std::string fileId;
				Ptr<PhotoSize> thumb;
				Ptr<std::string> fileName;
				Ptr<std::string> mimeType;
				int fileSize;
		};

		struct Voice {
{'fraction_non_alphanumeric': 0.10051145207916388, 'fraction_numerical': 0.00044474093840338, 'mean_word_length': 2.397280966767372, 'pattern_counts': {'":': 0, '<': 35, '<?xml version=': 0, '>': 35, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5777393', 'n_tokens_mistral': 1816, 'n_tokens_neox': 1448, 'n_words': 350}