Support non-negative parsing of lengths for Either<Length, T> types

This commit is contained in:
Yash Mehrotra 2017-04-16 09:19:00 +05:30
parent a52d5fbced
commit de84a89827
No known key found for this signature in database
GPG key ID: F4BD36A4B34D496E

View file

@ -587,34 +587,12 @@ impl Parse for Length {
} }
} }
impl Either<Length, None_> { impl<T: Parse> Either<Length, T> {
/// Parse a non-negative length or none /// Parse a non-negative length
#[inline] #[inline]
pub fn parse_non_negative_length(context: &ParserContext, input: &mut Parser) -> Result<Self, ()> { pub fn parse_non_negative_length(context: &ParserContext, input: &mut Parser) -> Result<Self, ()> {
if input.try(|input| None_::parse(context, input)).is_ok() { if let Ok(v) = input.try(|input| T::parse(context, input)) {
return Ok(Either::Second(None_)); return Ok(Either::Second(v));
}
Length::parse_non_negative(context, input).map(Either::First)
}
}
impl Either<Length, Normal> {
#[inline]
#[allow(missing_docs)]
pub fn parse_non_negative_length(context: &ParserContext, input: &mut Parser) -> Result<Self, ()> {
if input.try(|input| Normal::parse(context, input)).is_ok() {
return Ok(Either::Second(Normal));
}
Length::parse_internal(context, input, AllowedLengthType::NonNegative).map(Either::First)
}
}
impl Either<Length, Auto> {
#[inline]
#[allow(missing_docs)]
pub fn parse_non_negative_length(context: &ParserContext, input: &mut Parser) -> Result<Self, ()> {
if input.try(|input| Auto::parse(context, input)).is_ok() {
return Ok(Either::Second(Auto));
} }
Length::parse_internal(context, input, AllowedLengthType::NonNegative).map(Either::First) Length::parse_internal(context, input, AllowedLengthType::NonNegative).map(Either::First)
} }