bon_macros/util/
expr.rs

1use crate::util::prelude::*;
2
3pub(crate) trait ExprExt {
4    fn require_path_mod_style(&self) -> Result<&syn::Path>;
5}
6
7impl ExprExt for syn::Expr {
8    fn require_path_mod_style(&self) -> Result<&syn::Path> {
9        let expr = match self {
10            Self::Path(expr) => expr,
11            _ => bail!(self, "expected a simple path, like `foo::bar`"),
12        };
13
14        crate::parsing::reject_syntax("attribute", &expr.attrs.first())?;
15        crate::parsing::reject_syntax("<T as Trait> syntax", &expr.qself)?;
16
17        expr.path.require_mod_style()?;
18
19        Ok(&expr.path)
20    }
21}