mirror of
https://github.com/TheFunny/TelegramTwitterMediaBot.git
synced 2026-10-06 01:22:16 +00:00
TypeModel's Illust and Manga variants existed only so serde would accept those values -- both call sites ask a single question (is this ugoira?), so the field is a String and the check is a comparison. Same for a type the API adds later: it no longer fails the whole parse.
77 lines
2.0 KiB
Rust
77 lines
2.0 KiB
Rust
// Model set for the native pixiv app-API client (app-api.pixiv.net).
|
|
|
|
use serde::Deserialize;
|
|
|
|
#[derive(Deserialize, Debug)]
|
|
pub struct IllustrationModel {
|
|
pub id: u64,
|
|
pub title: String,
|
|
/// The artwork's description as the app API returns it — HTML in most
|
|
/// works (`<br />`, `<a href>`, sometimes `<p>`), empty for many.
|
|
#[serde(default)]
|
|
pub caption: String,
|
|
/// `"illust"` / `"manga"` / `"ugoira"`; only ugoira changes how the
|
|
/// artwork is fetched (a zip of frames to encode), so the rest is kept as
|
|
/// the string the API sent rather than as variants nothing matches.
|
|
pub r#type: String,
|
|
pub image_urls: ImageUrlsModel,
|
|
pub user: UserInfoModel,
|
|
pub tags: Vec<IllustrationTagModel>,
|
|
pub page_count: u8,
|
|
pub sanity_level: u8,
|
|
/// 0 = undefined (unlabeled), 1 = not AI, 2 = AI-generated.
|
|
pub illust_ai_type: i32,
|
|
pub meta_single_page: MetaSinglePageModel,
|
|
pub meta_pages: Vec<MetaPageModel>,
|
|
}
|
|
|
|
#[derive(Deserialize, Debug)]
|
|
pub struct UserInfoModel {
|
|
pub id: u64,
|
|
pub name: String,
|
|
}
|
|
|
|
#[derive(Deserialize, Debug)]
|
|
pub struct ImageUrlsModel {
|
|
pub medium: String,
|
|
pub large: String,
|
|
#[serde(default)]
|
|
pub original: Option<String>,
|
|
}
|
|
|
|
#[derive(Deserialize, Debug)]
|
|
pub struct IllustrationTagModel {
|
|
pub name: String,
|
|
}
|
|
|
|
#[derive(Deserialize, Debug)]
|
|
pub struct MetaSinglePageModel {
|
|
#[serde(default)]
|
|
pub original_image_url: Option<String>,
|
|
}
|
|
|
|
#[derive(Deserialize, Debug)]
|
|
pub struct MetaPageModel {
|
|
pub image_urls: ImageUrlsModel,
|
|
}
|
|
|
|
#[derive(Deserialize, Debug)]
|
|
pub struct UgoiraMetadataModel {
|
|
/// Older API shape (`zip_url`); newer responses use `zip_urls.medium`.
|
|
#[serde(default)]
|
|
pub zip_url: Option<String>,
|
|
#[serde(default)]
|
|
pub zip_urls: Option<UgoiraZipUrlsModel>,
|
|
pub frames: Vec<UgoiraFrameModel>,
|
|
}
|
|
|
|
#[derive(Deserialize, Debug)]
|
|
pub struct UgoiraZipUrlsModel {
|
|
pub medium: String,
|
|
}
|
|
|
|
#[derive(Deserialize, Debug)]
|
|
pub struct UgoiraFrameModel {
|
|
pub delay: u32,
|
|
}
|