chore: workspace management

This commit is contained in:
mokurin000
2025-07-29 17:46:15 +08:00
parent a9ce21c909
commit d0c234dede
9 changed files with 43 additions and 29 deletions

View File

@@ -0,0 +1,55 @@
use std::backtrace::Backtrace;
use nyquest::{AsyncClient, Body, Request};
mod model;
use model::{GetResponse, GetUserId};
pub struct QRCode<'a> {
qrcode_content: &'a str,
}
#[derive(Debug, snafu::Snafu)]
pub enum QRLoginError {
QRCodeExpired10,
QRCodeExpired30,
BadSingature,
Unknown {
error_kind: i64,
},
#[snafu(context(false))]
NyquestError {
source: nyquest::Error,
backtrace: Backtrace,
},
#[snafu(context(false))]
JSONError {
source: serde_json::error::Error,
backtrace: Backtrace,
},
}
impl QRCode<'_> {
pub async fn login(self, client: &AsyncClient) -> Result<i64, QRLoginError> {
let qr_code = &self.qrcode_content.as_bytes()[self.qrcode_content.len() - 64..];
let qr_code = String::from_utf8_lossy(qr_code);
let req = Request::post("http://ai.sys-allnet.cn/wc_aime/api/get_data")
.with_body(Body::json(&GetUserId::new(qr_code))?);
let resp = client.request(req).await?;
let resp: GetResponse = resp.json().await?;
let user_id = resp.user_id;
match resp.error_id {
0 => return Ok(user_id),
2 => Err(QRLoginError::QRCodeExpired10),
1 => Err(QRLoginError::QRCodeExpired30),
50 => Err(QRLoginError::BadSingature),
error_kind @ _ => Err(QRLoginError::Unknown { error_kind }),
}
}
}