pixwhile/pixivmodels.h

71 lines
1.6 KiB
C++

#pragma once
#include <string>
#include <vector>
#include <optional>
#include <utility>
#include <nlohmann/json.hpp>
struct Images {
std::optional<std::string> original;
std::vector<std::string> thumbnails;
const std::string& original_or_thumbnail() const;
const std::string& thumbnail_or_original(size_t back = 0) const;
};
struct User {
std::string username;
std::string display_name;
uint64_t user_id;
std::optional<Images> cover_images;
Images profile_pictures;
std::vector<std::pair<std::string, std::string>> links;
};
struct Tag {
std::string japanese;
std::optional<std::string> 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<std::string> comment;
std::vector<Tag> tags;
std::vector<Images> images;
};
struct Illusts {
std::vector<Illust> illusts;
size_t total_illusts;
size_t total_pages;
};
struct SearchResults {
Illusts illusts;
std::unordered_map<std::string, std::string> tag_translations;
};
struct SearchSuggestion {
std::string tag;
std::optional<std::string> 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);