-> Result, ()> { if input.try_parse(|input| input.expect_ident_matching("none")).is_ok() { Ok(None) } else { Image::parse(context, input).map(Some) // tail call } } ``` ```rust,ignore // [ | ] [ | ]? fn parse_border_spacing(_context: &ParserContext, input: &mut Parser) -> Result<(LengthOrPercentage, LengthOrPercentage), ()> { let first = LengthOrPercentage::parse?; let second = input.try_parse(LengthOrPercentage::parse).unwrap_or(first); (first, second) } ```