accept int or string in api

This commit is contained in:
Simon
2026-02-08 15:42:58 +00:00
parent 7b1bb758e3
commit 310dfd71e9
2 changed files with 25 additions and 13 deletions

View File

@@ -1029,18 +1029,14 @@ async fn videos_post(
} }
let page: u8 = video_request let page: u8 = video_request
.page .page
.as_deref() .as_ref()
.unwrap_or("1") .and_then(|value| value.to_u8())
.to_string() .unwrap_or(1);
.parse()
.unwrap();
let perPage: u8 = video_request let perPage: u8 = video_request
.perPage .perPage
.as_deref() .as_ref()
.unwrap_or("10") .and_then(|value| value.to_u8())
.to_string() .unwrap_or(10);
.parse()
.unwrap();
let featured = video_request let featured = video_request
.featured .featured
.as_deref() .as_deref()
@@ -1199,4 +1195,4 @@ pub async fn test() -> Result<impl web::Responder, web::Error> {
).await; ).await;
Ok(web::HttpResponse::Ok()) Ok(web::HttpResponse::Ok())
} }

View File

@@ -1,6 +1,22 @@
use std::collections::HashMap; use std::collections::HashMap;
use crate::util::requester::Requester; use crate::util::requester::Requester;
use serde;
#[derive(serde::Serialize, serde::Deserialize, Debug)]
#[serde(untagged)]
pub enum FlexibleNumber {
String(String),
Int(u64),
}
impl FlexibleNumber {
pub fn to_u8(&self) -> Option<u8> {
match self {
FlexibleNumber::String(value) => value.parse::<u8>().ok(),
FlexibleNumber::Int(value) => u8::try_from(*value).ok(),
}
}
}
#[derive(serde::Serialize, serde::Deserialize, Debug)] #[derive(serde::Serialize, serde::Deserialize, Debug)]
pub struct VideosRequest { pub struct VideosRequest {
@@ -21,8 +37,8 @@ pub struct VideosRequest {
pub channel: Option<String>, //"youtube", pub channel: Option<String>, //"youtube",
pub sort: Option<String>, //"new", pub sort: Option<String>, //"new",
pub query: Option<String>, //"kittens", pub query: Option<String>, //"kittens",
pub page: Option<String>, //1, pub page: Option<FlexibleNumber>, //1,
pub perPage: Option<String>, //10, pub perPage: Option<FlexibleNumber>, //10,
// Your server's global options will be sent in the videos request // Your server's global options will be sent in the videos request
// pub flavor: "mint chocolate chip" // pub flavor: "mint chocolate chip"
pub featured: Option<String>, // "featured", pub featured: Option<String>, // "featured",