bon_macros/util/
path.rs

1use crate::util::prelude::*;
2
3pub(crate) trait PathExt {
4    fn starts_with_segment(&self, desired_segment: &str) -> bool;
5
6    /// Returns an error if this path has some generic arguments.
7    fn require_mod_style(&self) -> Result;
8}
9
10impl PathExt for syn::Path {
11    fn starts_with_segment(&self, desired_segment: &str) -> bool {
12        self.segments
13            .first()
14            .map(|first| first.ident == desired_segment)
15            .unwrap_or(false)
16    }
17
18    fn require_mod_style(&self) -> Result {
19        if self
20            .segments
21            .iter()
22            .any(|seg| seg.arguments != syn::PathArguments::None)
23        {
24            bail!(self, "expected a simple path e.g. `foo::bar`");
25        }
26
27        Ok(())
28    }
29}