ehttpd_querystring/
querystringext.rsuse crate::querystring::QueryString;
use ehttpd::error::Error;
use std::{
borrow::{Borrow, Cow},
str::{self, FromStr},
};
pub trait QueryStringExt<'a> {
fn get_str<K>(&self, key: &K) -> Result<Option<&str>, Error>
where
K: Ord + ?Sized,
Cow<'a, [u8]>: Borrow<K> + Ord;
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_str<K>(&self, key: &K) -> Result<Option<&str>, Error>
where
K: Ord + ?Sized,
Cow<'a, [u8]>: Borrow<K> + Ord,
{
let Some(value) = self.get(key) else {
return Ok(None);
};
let value = str::from_utf8(value)?;
Ok(Some(value))
}
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_str(key)? else {
return Ok(None);
};
let parsed = value.parse()?;
Ok(Some(parsed))
}
}