syn_utils/
path.rs

1use crate::*;
2
3pub trait PathExt {
4  fn last_segment(&self) -> &PathSegment;
5  fn last_segment_mut(&mut self) -> &mut PathSegment;
6  fn leading_path(&self) -> Vec<&PathSegment>;
7}
8
9impl PathExt for Path {
10  fn leading_path(&self) -> Vec<&PathSegment> {
11    let mut segments: Vec<&PathSegment> = Vec::new();
12
13    let mut segments_iter = self.segments.iter().peekable();
14
15    while let Some(segment) = segments_iter.next() {
16      if segments_iter.peek().is_some() {
17        segments.push(segment);
18      }
19    }
20
21    segments
22  }
23
24  fn last_segment(&self) -> &PathSegment {
25    self.segments.last().unwrap()
26  }
27
28  fn last_segment_mut(&mut self) -> &mut PathSegment {
29    self.segments.last_mut().unwrap()
30  }
31}