use crate::{ BilibiliRequest, BpiClient, BpiError, BpiResponse };
use serde::{ Deserialize, Serialize };
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct VipExperienceData {
pub r#type: u32,
pub is_grant: bool,
}
impl BpiClient {
pub async fn vip_receive_privilege(
&self,
type_: u8
) -> Result<BpiResponse<serde_json::Value>, BpiError> {
let csrf = self.csrf()?;
let params = [
("type", type_.to_string()),
("csrf", csrf),
];
self
.post("https://api.bilibili.com/x/vip/privilege/receive")
.form(¶ms)
.send_bpi("兑换大会员卡券").await
}
pub async fn vip_add_experience(&self) -> Result<BpiResponse<VipExperienceData>, BpiError> {
let csrf = self.csrf()?;
let params = [("csrf", csrf)];
self
.post("https://api.bilibili.com/x/vip/experience/add")
.form(¶ms)
.send_bpi("领取大会员每日经验").await
}
}
#[cfg(test)]
mod tests {
use super::*;
#[tokio::test]
async fn test_receive_vip_privilege() {
let bpi = BpiClient::new();
let resp = bpi.vip_receive_privilege(1).await;
match resp {
Ok(resp) => { assert_eq!(resp.code, 0) }
Err(e) => {
assert_eq!(e.code().unwrap(), 69801);
}
}
}
#[tokio::test]
async fn test_add_vip_experience() {
let bpi = BpiClient::new();
let resp = bpi.vip_add_experience().await;
match resp {
Ok(resp) => { assert_eq!(resp.code, 0) }
Err(e) => {
assert!([69198, 6034007].contains(&e.code().unwrap()));
}
}
}
}