#pragma once #include #include #include #include #include struct Image { std::string url; std::optional> size; Image(std::string url_) : url(std::move(url_)) {} Image(std::string url_, std::optional> size_) : url(std::move(url_)), size(std::move(size_)) {} }; struct Images { std::optional original; std::vector thumbnails; const Image& original_or_thumbnail() const; const Image& thumbnail_or_original(size_t back = 0) const; }; struct User { std::string username; std::string display_name; uint64_t user_id; std::optional cover_images; Images profile_pictures; std::vector> links; std::optional ogp_image; }; struct Tag { std::string japanese; std::optional english; }; struct Illust { std::string username; std::string user_display_name; uint64_t user_id; Images user_profile_pictures; uint64_t illust_id; std::string title; bool ai_generated; time_t upload_time; std::optional comment_html; std::vector tags; std::vector images; size_t page_count; }; struct Illusts { std::vector illusts; size_t total_illusts; size_t total_pages; }; struct SearchResults { Illusts illusts; std::unordered_map tag_translations; }; struct SearchSuggestion { std::string tag; std::optional english_tag; }; void from_json(const nlohmann::json& j, User& user); void from_json(const nlohmann::json& j, Tag& tag); void from_json(const nlohmann::json& j, Illust& illust); void from_json(const nlohmann::json& j, Illusts& illusts); void from_json(const nlohmann::json& j, SearchResults& search_results); void from_json(const nlohmann::json& j, SearchSuggestion& search_suggestion);