pub fn escaped(i: &str) -> nom::IResult<&str, &str> {
crate::combinators::recognize_tuple((
nom::bytes::complete::tag("%"),
crate::parsers::char::hex,
crate::parsers::char::hex,
))(i)
}
pub fn hex(i: &str) -> nom::IResult<&str, &str> {
nom::combinator::recognize(nom::character::complete::satisfy(|c| c.is_ascii_hexdigit()))(i)
}
pub fn mark(i: &str) -> nom::IResult<&str, &str> {
nom::combinator::recognize(nom::character::complete::one_of("-_.!~*'()"))(i)
}
pub fn p_char(i: &str) -> nom::IResult<&str, &str> {
nom::branch::alt((
crate::parsers::char::unreserved,
crate::parsers::char::escaped,
nom::combinator::recognize(nom::character::complete::one_of(":@&=+$,")),
))(i)
}
pub fn reserved(i: &str) -> nom::IResult<&str, &str> {
nom::combinator::recognize(nom::character::complete::one_of(";/?:@&=+$,"))(i)
}
pub fn unreserved(i: &str) -> nom::IResult<&str, &str> {
nom::branch::alt((
nom::combinator::recognize(nom::character::complete::satisfy(|c| c.is_ascii_alphanumeric())),
crate::parsers::char::mark,
))(i)
}
pub fn uri_c(i: &str) -> nom::IResult<&str, &str> {
nom::branch::alt((crate::parsers::char::reserved, crate::parsers::char::unreserved, crate::parsers::char::escaped))(
i,
)
}
pub fn uri_c_no_slash(i: &str) -> nom::IResult<&str, &str> {
nom::branch::alt((
crate::parsers::char::unreserved,
crate::parsers::char::escaped,
nom::combinator::recognize(nom::character::complete::one_of(";?:@&=+$,")),
))(i)
}
#[cfg(test)]
mod tests;