use crate::querystring::QueryString;
use ehttpd::error::Error;
use std::{
borrow::{Borrow, Cow},
str::{self, FromStr},
};
pub trait QueryStringExt<'a> {
fn get_as<T, K>(&self, key: &K) -> Result<Option<T>, Error>
where
T: FromStr,
K: Ord + ?Sized,
Error: From<T::Err>,
Cow<'a, [u8]>: Borrow<K> + Ord;
}
impl<'a> QueryStringExt<'a> for QueryString<'a> {
fn get_as<T, K>(&self, key: &K) -> Result<Option<T>, Error>
where
T: FromStr,
K: Ord + ?Sized,
Error: From<T::Err>,
Cow<'a, [u8]>: Borrow<K> + Ord,
{
let Some(value) = self.get(key) else {
return Ok(None);
};
let value = str::from_utf8(value)?;
let parsed = value.parse()?;
Ok(Some(parsed))
}
}