codama_syn_helpers/extensions/
to_tokens.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use quote::ToTokens;
use std::fmt::Display;

pub trait ToTokensExtension<T: ToTokens> {
    fn get_self(&self) -> &T;

    fn error(&self, message: impl Display) -> syn::Error {
        syn::Error::new_spanned(self.get_self(), message)
    }
}

impl<T: ToTokens> ToTokensExtension<T> for T {
    fn get_self(&self) -> &T {
        self
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn error() {
        let path: syn::Path = syn::parse_quote! { foo::bar };
        let error = path.error("expected a single segment");
        assert_eq!(error.to_string(), "expected a single segment");
    }
}