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 pic: String,
18 pub owner: VideoOwner,
20 pub stat: VideoStat,
22 pub cid: Cid,
24 #[serde(default)]
26 pub pages: Vec<VideoPage>,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct VideoDetail {
32 #[serde(rename = "View")]
34 pub view: VideoView,
35 #[serde(default, rename = "Tags")]
37 pub tags: Vec<VideoTag>,
38 #[serde(default, rename = "Related")]
40 pub related: Vec<VideoRelated>,
41 #[serde(default, rename = "Card")]
43 pub card: Option<serde_json::Value>,
44 #[serde(default, rename = "Reply")]
46 pub reply: Option<serde_json::Value>,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize)]
51pub struct VideoOwner {
52 pub mid: Mid,
54 pub name: String,
56 pub face: String,
58}
59
60#[derive(Debug, Clone, Serialize, Deserialize)]
62pub struct VideoStat {
63 pub aid: Aid,
65 pub view: u64,
67 pub danmaku: u64,
69 pub reply: u64,
71 #[serde(default)]
73 pub favorite: Option<u64>,
74 #[serde(default)]
76 pub fav: Option<u64>,
77 pub coin: u64,
79 pub share: u64,
81 pub like: u64,
83}
84
85#[derive(Debug, Clone, Serialize, Deserialize)]
87pub struct VideoPage {
88 pub cid: Cid,
90 pub page: u32,
92 pub part: String,
94 pub duration: u64,
96}
97
98#[derive(Debug, Clone, Serialize, Deserialize)]
100pub struct VideoTag {
101 pub tag_id: u64,
103 #[serde(default)]
105 pub tag_name: String,
106 #[serde(default)]
108 pub jump_url: String,
109}
110
111#[derive(Debug, Clone, Serialize, Deserialize)]
113pub struct VideoRelated {
114 pub aid: Aid,
116 pub bvid: Bvid,
118 #[serde(default)]
120 pub title: String,
121 #[serde(default)]
123 pub cid: Option<Cid>,
124 #[serde(default)]
126 pub owner: Option<VideoOwner>,
127 #[serde(default)]
129 pub stat: Option<VideoStat>,
130}