bangumi_api/module/character/
model.rs

1use serde::{Deserialize, Serialize};
2use serde_repr::{Deserialize_repr, Serialize_repr};
3
4use crate::module::{
5    model::{BloodType, InfoBox, SimpleImage, Stat},
6    subject::model::SubjectType,
7};
8
9/// 角色搜索请求结构
10///
11/// 用于构建角色搜索请求的参数
12#[derive(Debug, Clone, Serialize, Deserialize)]
13pub struct CharacterSearch {
14    /// 搜索关键词
15    pub keyword: String,
16    /// 可选的搜索过滤条件
17    pub filter: Option<CharacterFilter>,
18}
19
20/// 角色搜索过滤条件
21///
22/// 用于细化角色搜索结果的过滤参数
23#[derive(Debug, Clone, Serialize, Deserialize)]
24pub struct CharacterFilter {
25    /// 是否包含NSFW内容
26    pub nsfw: Option<bool>,
27}
28
29/// 角色详细信息结构
30///
31/// 表示一个角色的完整信息
32#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct Character {
34    /// 角色ID
35    pub id: u32,
36    /// 角色名称
37    pub name: String,
38    /// 角色类型
39    pub r#type: CharacterType,
40    /// 角色图片信息
41    pub images: SimpleImage,
42    /// 角色简介
43    pub summary: String,
44    /// 是否被锁定
45    pub locked: bool,
46    /// 角色信息框,包含额外属性
47    pub infobox: InfoBox,
48    /// 角色性别
49    pub gender: String,
50    /// 角色血型
51    pub blood_type: Option<BloodType>,
52    /// 角色出生年份
53    pub birth_year: Option<u32>,
54    /// 角色出生月份
55    pub birth_mon: Option<u32>,
56    /// 角色出生日期
57    pub birth_day: Option<u32>,
58    /// 角色统计信息
59    pub stat: Stat,
60    /// 是否为NSFW内容
61    pub nsfw: bool,
62}
63
64/// 角色类型枚举
65///
66/// 表示角色的不同类型,使用u8作为底层存储类型
67#[derive(Debug, Clone, Serialize_repr, Deserialize_repr)]
68#[repr(u8)]
69pub enum CharacterType {
70    /// 普通角色
71    Character = 1,
72    /// 机械角色
73    Mechanic = 2,
74    /// 舰船角色
75    Ship = 3,
76    /// 组织角色
77    Organization = 4,
78}
79
80/// 角色与人物关联结构
81///
82/// 表示角色与配音演员或创作者的关联信息
83#[derive(Debug, Clone, Serialize, Deserialize)]
84pub struct CharacterPerson {
85    /// 角色ID
86    pub id: u32,
87    /// 角色名称
88    pub name: String,
89    /// 角色类型
90    pub r#type: CharacterType,
91    /// 角色图片信息
92    pub images: SimpleImage,
93    /// 关联的条目ID
94    pub subject_id: u32,
95    /// 关联的条目类型
96    pub subject_type: SubjectType,
97    /// 关联条目的原名
98    pub subject_name: String,
99    /// 关联条目的中文名
100    pub subject_name_cn: String,
101    /// 人物在条目中的职位或角色
102    pub staff: String,
103}
104
105/// 角色与条目的关联结构
106///
107/// 表示角色参与的条目信息
108#[derive(Debug, Clone, Serialize, Deserialize)]
109pub struct CharacterSubject {
110    /// 条目ID
111    pub id: u32,
112    /// 条目类型
113    pub r#type: SubjectType,
114    /// 角色在条目中的职位或角色
115    pub staff: String,
116    /// 条目原名
117    pub name: String,
118    /// 条目中文名
119    pub name_cn: String,
120    /// 条目图片URL
121    pub image: String,
122}