Skip to main content

bpi_rs/vip/
action.rs

1use crate::BilibiliRequest;
2use crate::response::BpiResult;
3use crate::vip::VipClient;
4use crate::vip::params::VipPrivilegeReceiveParams;
5use serde::{Deserialize, Serialize};
6
7const PRIVILEGE_RECEIVE_ENDPOINT: &str = "https://api.bilibili.com/x/vip/privilege/receive";
8const EXPERIENCE_ADD_ENDPOINT: &str = "https://api.bilibili.com/x/vip/experience/add";
9
10/// 大会员每日经验返回数据
11
12#[derive(Debug, Clone, Deserialize, Serialize)]
13pub struct VipExperienceData {
14    pub r#type: u32,
15    /// 是否领取成功
16    pub is_grant: bool,
17}
18
19impl<'a> VipClient<'a> {
20    /// Receives a VIP privilege coupon and returns the canonical payload result.
21    pub async fn receive_privilege(
22        &self,
23        params: VipPrivilegeReceiveParams,
24    ) -> BpiResult<Option<serde_json::Value>> {
25        let csrf = self.client.csrf()?;
26
27        self.client
28            .post(PRIVILEGE_RECEIVE_ENDPOINT)
29            .form(&params.form_pairs(&csrf))
30            .send_bpi_optional_payload("vip.privilege.receive")
31            .await
32    }
33
34    /// Adds daily VIP experience and returns the canonical payload result.
35    pub async fn add_experience(&self) -> BpiResult<VipExperienceData> {
36        let csrf = self.client.csrf()?;
37        let params = [("csrf", csrf)];
38        self.client
39            .post(EXPERIENCE_ADD_ENDPOINT)
40            .form(&params)
41            .send_bpi_payload("vip.experience.add")
42            .await
43    }
44}
45
46#[cfg(test)]
47mod tests {}