pub(super) fn parse_depth_prefixed_arg(
arg: Option<&str>,
default_depth: u32,
) -> Result<(u32, Option<&str>), String> {
let Some(raw) = arg.map(str::trim).filter(|raw| !raw.is_empty()) else {
return Ok((default_depth, None));
};
let mut parts = raw.splitn(2, char::is_whitespace);
let first = parts.next().unwrap_or_default();
if first.chars().all(|ch| ch.is_ascii_digit()) {
let depth: u32 = first
.parse()
.map_err(|_| "Depth must be an integer from 0 to 3".to_string())?;
if depth > 3 {
return Err("Depth must be between 0 and 3".to_string());
}
Ok((depth, parts.next().map(str::trim)))
} else {
Ok((default_depth, Some(raw)))
}
}