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
.page
.as_deref()
.unwrap_or("1")
.to_string()
.parse()
.unwrap();
.as_ref()
.and_then(|value| value.to_u8())
.unwrap_or(1);
let perPage: u8 = video_request
.perPage
.as_deref()
.unwrap_or("10")
.to_string()
.parse()
.unwrap();
.as_ref()
.and_then(|value| value.to_u8())
.unwrap_or(10);
let featured = video_request
.featured
.as_deref()

View File

@@ -1,6 +1,22 @@
use std::collections::HashMap;
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)]
pub struct VideosRequest {
@@ -21,8 +37,8 @@ pub struct VideosRequest {
pub channel: Option<String>, //"youtube",
pub sort: Option<String>, //"new",
pub query: Option<String>, //"kittens",
pub page: Option<String>, //1,
pub perPage: Option<String>, //10,
pub page: Option<FlexibleNumber>, //1,
pub perPage: Option<FlexibleNumber>, //10,
// Your server's global options will be sent in the videos request
// pub flavor: "mint chocolate chip"
pub featured: Option<String>, // "featured",