web_url/parse/path_plus/
path_plus.rs1use crate::parse::parse_fragment;
2use crate::parse::parse_path;
3use crate::parse::parse_query;
4use crate::parse::Error;
5
6#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug)]
8pub struct PathPlus {
9 pub path_len: usize, pub query_len: usize, pub fragment_len: usize, }
13
14pub fn parse_path_plus(path_plus: &str) -> Result<PathPlus, Error> {
18 let (path, after_path) = parse_path(path_plus)?;
19 let (query, after_query) = parse_query(after_path)?;
20 let fragment: Option<&str> = parse_fragment(after_query)?;
21
22 let path_len: usize = path.as_str().len();
23 let query_len: usize = query.map(|q| q.as_str().len()).unwrap_or(0);
24 let fragment_len: usize = fragment.map(|f| f.len()).unwrap_or(0);
25
26 Ok(PathPlus {
27 path_len,
28 query_len,
29 fragment_len,
30 })
31}