1use serde::{Deserialize, Serialize};
2
3use crate::ids::{Aid, Bvid, Cid, Mid};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct VideoView {
8 pub aid: Aid,
10 pub bvid: Bvid,
12 pub videos: u32,
14 pub title: String,
16 pub owner: VideoOwner,
18 pub stat: VideoStat,
20 pub cid: Cid,
22 #[serde(default)]
24 pub pages: Vec<VideoPage>,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
29pub struct VideoDetail {
30 #[serde(rename = "View")]
32 pub view: VideoView,
33 #[serde(default, rename = "Tags")]
35 pub tags: Vec<VideoTag>,
36 #[serde(default, rename = "Related")]
38 pub related: Vec<VideoRelated>,
39 #[serde(default, rename = "Card")]
41 pub card: Option<serde_json::Value>,
42 #[serde(default, rename = "Reply")]
44 pub reply: Option<serde_json::Value>,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize)]
49pub struct VideoOwner {
50 pub mid: Mid,
52 pub name: String,
54 pub face: String,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize)]
60pub struct VideoStat {
61 pub aid: Aid,
63 pub view: u64,
65 pub danmaku: u64,
67 pub reply: u64,
69 #[serde(default)]
71 pub favorite: Option<u64>,
72 #[serde(default)]
74 pub fav: Option<u64>,
75 pub coin: u64,
77 pub share: u64,
79 pub like: u64,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize)]
85pub struct VideoPage {
86 pub cid: Cid,
88 pub page: u32,
90 pub part: String,
92 pub duration: u64,
94}
95
96#[derive(Debug, Clone, Serialize, Deserialize)]
98pub struct VideoTag {
99 pub tag_id: u64,
101 #[serde(default)]
103 pub tag_name: String,
104 #[serde(default)]
106 pub jump_url: String,
107}
108
109#[derive(Debug, Clone, Serialize, Deserialize)]
111pub struct VideoRelated {
112 pub aid: Aid,
114 pub bvid: Bvid,
116 #[serde(default)]
118 pub title: String,
119 #[serde(default)]
121 pub cid: Option<Cid>,
122 #[serde(default)]
124 pub owner: Option<VideoOwner>,
125 #[serde(default)]
127 pub stat: Option<VideoStat>,
128}