From 310dfd71e979a36802ea1c8cc8d054716005c1b1 Mon Sep 17 00:00:00 2001 From: Simon Date: Sun, 8 Feb 2026 15:42:58 +0000 Subject: [PATCH] accept int or string in api --- src/api.rs | 18 +++++++----------- src/videos.rs | 20 ++++++++++++++++++-- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/api.rs b/src/api.rs index 95a8ccd..ee838dd 100644 --- a/src/api.rs +++ b/src/api.rs @@ -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() @@ -1199,4 +1195,4 @@ pub async fn test() -> Result { ).await; Ok(web::HttpResponse::Ok()) -} \ No newline at end of file +} diff --git a/src/videos.rs b/src/videos.rs index 42658dc..ab09430 100644 --- a/src/videos.rs +++ b/src/videos.rs @@ -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 { + match self { + FlexibleNumber::String(value) => value.parse::().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, //"youtube", pub sort: Option, //"new", pub query: Option, //"kittens", - pub page: Option, //1, - pub perPage: Option, //10, + pub page: Option, //1, + pub perPage: Option, //10, // Your server's global options will be sent in the videos request // pub flavor: "mint chocolate chip" pub featured: Option, // "featured",