quote_data_helpers/
helper.rs

1use proc_macro2::TokenStream;
2use quote::ToTokens;
3use std::error::Error as StdError;
4use std::fmt::{Display, Formatter, Result as FmtResult};
5use syn::{AngleBracketedGenericArguments, Error, GenericArgument, PathArguments, Type};
6use crate::error::QuoteItError;
7
8pub fn assert_angle_args(
9    arguments: &PathArguments,
10) -> Result<Option<&AngleBracketedGenericArguments>, Error> {
11    match arguments {
12        PathArguments::None => Ok(None),
13        PathArguments::AngleBracketed(result) => Ok(Some(result)),
14        _ => Err(QuoteItError::NotAngleBracketedArgs.into_syn_error(arguments)),
15    }
16}
17
18pub fn get_nested_types(arguments: Option<&AngleBracketedGenericArguments>) -> Vec<&Type> {
19    match arguments {
20        Some(args) => args
21            .args
22            .iter()
23            .filter_map(|arg| match arg {
24                GenericArgument::Type(ty) => Some(ty),
25                _ => None,
26            })
27            .collect(),
28        None => Vec::new(),
29    }
30}
31
32#[derive(Clone, Debug)]
33pub struct TokenizableError;
34
35impl StdError for TokenizableError {
36    fn source(&self) -> Option<&(dyn StdError + 'static)> {
37        None
38    }
39}
40
41impl Display for TokenizableError {
42    fn fmt(&self, _f: &mut Formatter<'_>) -> FmtResult {
43        unreachable!()
44    }
45}
46
47impl ToTokens for TokenizableError {
48    fn to_tokens(&self, _tokens: &mut TokenStream) {
49        unreachable!()
50    }
51}