Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
let mut meta = MetadataFieldIterator::new(comp.payload_start);
- let client = meta.next()
- .map(|r| r.map_err(Into::into))
- .unwrap_or_else(|| Err(anyhow!("missing")))
- .context("client addr")?;
-
- let client: IpAddr = client.parse().context("client address")?;
+ let client: ClientName = meta.need().context("client addr")?;
// let client = all_clients.get(&client).ok_or_else(|| anyhow!(BAD_CLIENT))?;
eprintln!("boundary={:?} start={} name={:?} client={}",
#[throws(AE)]
pub fn need<T>(&mut self) -> T
where T: FromStr,
- T::Err: std::error::Error + Sync + Send + 'static,
+ AE: From<T::Err>,
{
self.parse()?.ok_or_else(|| anyhow!("missing"))?
}
#[throws(AE)]
pub fn parse<T>(&mut self) -> Option<T>
where T: FromStr,
- T::Err: std::error::Error + Sync + Send + 'static,
+ AE: From<T::Err>,
{
let s = if let Some(r) = self.next() { r? } else { return None };
Some(s.parse()?)