use super::super::super::internally_tagged_variants::push_owner_segment;
use super::super::super::types::{FieldResolver, JsonNavStep};
pub(super) fn push_numeric_bracket_step(segment: &str, steps: &mut Vec<JsonNavStep>) -> Option<()> {
let Some(open) = segment.find('[') else {
return Some(());
};
let Some(close) = segment[open..].find(']') else {
return Some(());
};
let inside = &segment[open + 1..open + close];
let index: usize = inside.parse().ok()?;
steps.push(JsonNavStep::Index(index));
Some(())
}
impl FieldResolver {
pub(super) fn swift_bridged_tail_steps(
&self,
boundary: &str,
later_segments: &[&str],
owner_path: &mut String,
) -> Option<Vec<JsonNavStep>> {
let mut steps = Vec::new();
push_numeric_bracket_step(boundary, &mut steps)?;
for later in later_segments {
let later_bare = later.split('[').next().unwrap_or(later);
if self.is_internally_tagged_variant_segment(owner_path, later_bare) {
push_owner_segment(owner_path, later_bare);
continue;
}
steps.push(JsonNavStep::Key(later_bare.to_string()));
push_numeric_bracket_step(later, &mut steps)?;
push_owner_segment(owner_path, later_bare);
}
Some(steps)
}
}