use crate::BilibiliRequest;
use crate::article::ArticleClient;
use crate::article::params::{ArticleCoinParams, ArticleFavoriteParams, ArticleLikeParams};
use crate::response::BpiResult;
const LIKE_ENDPOINT: &str = "https://api.bilibili.com/x/article/like";
const COIN_ENDPOINT: &str = "https://api.bilibili.com/x/web-interface/coin/add";
const FAVORITE_ADD_ENDPOINT: &str = "https://api.bilibili.com/x/article/favorites/add";
const FAVORITE_DEL_ENDPOINT: &str = "https://api.bilibili.com/x/article/favorites/del";
#[derive(Debug, Clone, serde::Deserialize)]
pub struct CoinResponseData {
pub like: bool,
}
impl<'a> ArticleClient<'a> {
pub async fn like(&self, params: ArticleLikeParams) -> BpiResult<Option<serde_json::Value>> {
let csrf = self.client.csrf()?;
self.client
.post(LIKE_ENDPOINT)
.form(¶ms.form_pairs(&csrf))
.send_bpi_optional_payload("article.like")
.await
}
pub async fn coin(&self, params: ArticleCoinParams) -> BpiResult<CoinResponseData> {
let csrf = self.client.csrf()?;
self.client
.post(COIN_ENDPOINT)
.form(¶ms.form_pairs(&csrf))
.send_bpi_payload("article.coin")
.await
}
pub async fn favorite(
&self,
params: ArticleFavoriteParams,
) -> BpiResult<Option<serde_json::Value>> {
let csrf = self.client.csrf()?;
self.client
.post(FAVORITE_ADD_ENDPOINT)
.form(¶ms.form_pairs(&csrf))
.send_bpi_optional_payload("article.favorite")
.await
}
pub async fn unfavorite(
&self,
params: ArticleFavoriteParams,
) -> BpiResult<Option<serde_json::Value>> {
let csrf = self.client.csrf()?;
self.client
.post(FAVORITE_DEL_ENDPOINT)
.form(¶ms.form_pairs(&csrf))
.send_bpi_optional_payload("article.unfavorite")
.await
}
}
#[cfg(test)]
mod tests {}