ehttpd_querystring/
querystringext.rs1use crate::querystring::QueryString;
4use ehttpd::error::Error;
5use std::{
6 borrow::{Borrow, Cow},
7 str::{self, FromStr},
8};
9
10pub trait QueryStringExt<'a> {
12 fn get_str<K>(&self, key: &K) -> Result<Option<&str>, Error>
13 where
14 K: Ord + ?Sized,
15 Cow<'a, [u8]>: Borrow<K> + Ord;
16
17 fn get_as<T, K>(&self, key: &K) -> Result<Option<T>, Error>
19 where
20 T: FromStr,
21 K: Ord + ?Sized,
22 Error: From<T::Err>,
23 Cow<'a, [u8]>: Borrow<K> + Ord;
24}
25impl<'a> QueryStringExt<'a> for QueryString<'a> {
26 fn get_str<K>(&self, key: &K) -> Result<Option<&str>, Error>
27 where
28 K: Ord + ?Sized,
29 Cow<'a, [u8]>: Borrow<K> + Ord,
30 {
31 let Some(value) = self.get(key) else {
33 return Ok(None);
35 };
36
37 let value = str::from_utf8(value)?;
39 Ok(Some(value))
40 }
41
42 fn get_as<T, K>(&self, key: &K) -> Result<Option<T>, Error>
43 where
44 T: FromStr,
45 K: Ord + ?Sized,
46 Error: From<T::Err>,
47 Cow<'a, [u8]>: Borrow<K> + Ord,
48 {
49 let Some(value) = self.get_str(key)? else {
51 return Ok(None);
53 };
54
55 let parsed = value.parse()?;
57 Ok(Some(parsed))
58 }
59}