use crate::BilibiliRequest;
use crate::BpiError;
use crate::BpiResult;
use crate::login::LoginClient;
const UPDATE_USER_SIGN_ENDPOINT: &str = "https://api.bilibili.com/x/member/web/sign/update";
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct LoginUserSignParams {
user_sign: String,
}
impl LoginUserSignParams {
pub fn new(user_sign: impl Into<String>) -> BpiResult<Self> {
let user_sign = user_sign.into();
if user_sign.len() > 70 {
return Err(BpiError::invalid_parameter(
"user_sign",
"length cannot exceed 70 bytes",
));
}
Ok(Self { user_sign })
}
fn form_pairs(&self, csrf: &str) -> Vec<(&'static str, String)> {
vec![
("user_sign", self.user_sign.clone()),
("csrf", csrf.to_string()),
]
}
}
impl<'a> LoginClient<'a> {
pub async fn update_user_sign(
&self,
params: LoginUserSignParams,
) -> BpiResult<Option<serde_json::Value>> {
let csrf = self.client.csrf()?;
self.client
.post(UPDATE_USER_SIGN_ENDPOINT)
.form(¶ms.form_pairs(&csrf))
.send_bpi_optional_payload("login.member_center.user_sign.update")
.await
}
}