quote_data_helpers/
helper.rs1use 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}