From 2dbcfa10e340ca8e165498c3b9b4942f3fdc05b2 Mon Sep 17 00:00:00 2001 From: Sergio Benitez Date: Mon, 4 Apr 2016 04:19:07 -0700 Subject: [PATCH] Implemented FromFormValue for all of the FromStrs. --- lib/src/form.rs | 21 +++++++++++++++------ lib/src/param.rs | 6 +++--- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/lib/src/form.rs b/lib/src/form.rs index b0b31f1d..5cdeb4d0 100644 --- a/lib/src/form.rs +++ b/lib/src/form.rs @@ -1,4 +1,6 @@ use std::str::FromStr; +use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddrV4, SocketAddrV6, SocketAddr}; + use error::Error; pub trait FromForm<'f>: Sized { @@ -19,14 +21,21 @@ impl<'v> FromFormValue<'v> for &'v str { } } -impl<'v> FromFormValue<'v> for isize { - type Error = &'v str; - - fn parse(v: &'v str) -> Result { - isize::from_str(v).map_err(|_| v) - } +macro_rules! impl_with_fromstr { + ($($T:ident),+) => ($( + impl<'v> FromFormValue<'v> for $T { + type Error = &'v str; + fn parse(v: &'v str) -> Result { + $T::from_str(v).map_err(|_| v) + } + } + )+) } +impl_with_fromstr!(f32, f64, isize, i8, i16, i32, i64, usize, u8, u16, u32, u64, + bool, String, IpAddr, Ipv4Addr, Ipv6Addr, SocketAddrV4, SocketAddrV6, + SocketAddr); + impl<'v, T: FromFormValue<'v>> FromFormValue<'v> for Option { type Error = Error; diff --git a/lib/src/param.rs b/lib/src/param.rs index 6428c0f6..772ec829 100644 --- a/lib/src/param.rs +++ b/lib/src/param.rs @@ -14,9 +14,9 @@ impl<'a> FromParam<'a> for &'a str { } macro_rules! impl_with_fromstr { - ($($T:ident),+) => ( - $(impl<'a> FromParam<'a> for $T { - fn from_param(param: &'a str) -> Result<$T, Error> { + ($($T:ident),+) => ($( + impl<'a> FromParam<'a> for $T { + fn from_param(param: &'a str) -> Result { $T::from_str(param).map_err(|_| Error::BadParse) } }