headers/util/
csv.rs
1use std::fmt;
2
3pub(crate) fn from_comma_delimited<'i, I, T, E>(values: &mut I) -> Result<E, ::Error>
5where
6 I: Iterator<Item = &'i ::HeaderValue>,
7 T: ::std::str::FromStr,
8 E: ::std::iter::FromIterator<T>,
9{
10 values
11 .flat_map(|value| {
12 value.to_str().into_iter().flat_map(|string| {
13 string
14 .split(',')
15 .filter_map(|x| match x.trim() {
16 "" => None,
17 y => Some(y),
18 })
19 .map(|x| x.parse().map_err(|_| ::Error::invalid()))
20 })
21 })
22 .collect()
23}
24
25pub(crate) fn fmt_comma_delimited<T: fmt::Display>(
27 f: &mut fmt::Formatter,
28 mut iter: impl Iterator<Item = T>,
29) -> fmt::Result {
30 if let Some(part) = iter.next() {
31 fmt::Display::fmt(&part, f)?;
32 }
33 for part in iter {
34 f.write_str(", ")?;
35 fmt::Display::fmt(&part, f)?;
36 }
37 Ok(())
38}