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#[derive(Debug, Clone, Deserialize, Serialize)]
13pub struct VipExperienceData {
14 pub r#type: u32,
15 pub is_grant: bool,
17}
18
19impl<'a> VipClient<'a> {
20 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(¶ms.form_pairs(&csrf))
30 .send_bpi_optional_payload("vip.privilege.receive")
31 .await
32 }
33
34 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(¶ms)
41 .send_bpi_payload("vip.experience.add")
42 .await
43 }
44}
45
46#[cfg(test)]
47mod tests {}