mirror of
https://github.com/lifegpc/pixiv_downloader.git
synced 2026-06-25 21:27:01 +08:00
60 lines
1.3 KiB
Rust
60 lines
1.3 KiB
Rust
use super::preclude::*;
|
|
|
|
pub const VERSION: [u8; 4] = [0, 0, 1, 0];
|
|
|
|
pub struct VersionContext {
|
|
ctx: Arc<ServerContext>,
|
|
}
|
|
|
|
impl VersionContext {
|
|
pub fn new(ctx: Arc<ServerContext>) -> Self {
|
|
Self { ctx }
|
|
}
|
|
}
|
|
|
|
#[async_trait]
|
|
impl ResponseJsonFor<Body> for VersionContext {
|
|
async fn response_json(
|
|
&self,
|
|
req: Request<Body>,
|
|
) -> Result<Response<JsonValue>, PixivDownloaderError> {
|
|
filter_http_methods!(
|
|
req,
|
|
json::object! {},
|
|
true,
|
|
self.ctx,
|
|
allow_headers = [CONTENT_TYPE],
|
|
GET,
|
|
OPTIONS,
|
|
POST,
|
|
);
|
|
Ok(builder.body(json::object! {"version": VERSION.to_vec()})?)
|
|
}
|
|
}
|
|
|
|
pub struct VersionRoute {
|
|
regex: Regex,
|
|
}
|
|
|
|
impl VersionRoute {
|
|
pub fn new() -> Self {
|
|
Self {
|
|
regex: Regex::new(r"^(/+api)?/+version(/.*)?$").unwrap(),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl MatchRoute<Body, Body> for VersionRoute {
|
|
fn match_route(
|
|
&self,
|
|
ctx: &Arc<ServerContext>,
|
|
req: &http::Request<Body>,
|
|
) -> Option<Box<ResponseForType>> {
|
|
if self.regex.is_match(req.uri().path()) {
|
|
Some(Box::new(VersionContext::new(Arc::clone(ctx))))
|
|
} else {
|
|
None
|
|
}
|
|
}
|
|
}
|