quote-data-helpers 1.0.0

Internal functions, struct for quote-it
Documentation
use proc_macro2::TokenStream;
use quote::ToTokens;
use std::error::Error as StdError;
use std::fmt::{Display, Formatter, Result as FmtResult};
use syn::{AngleBracketedGenericArguments, Error, GenericArgument, PathArguments, Type};
use crate::error::QuoteItError;

pub fn assert_angle_args(
    arguments: &PathArguments,
) -> Result<Option<&AngleBracketedGenericArguments>, Error> {
    match arguments {
        PathArguments::None => Ok(None),
        PathArguments::AngleBracketed(result) => Ok(Some(result)),
        _ => Err(QuoteItError::NotAngleBracketedArgs.into_syn_error(arguments)),
    }
}

pub fn get_nested_types(arguments: Option<&AngleBracketedGenericArguments>) -> Vec<&Type> {
    match arguments {
        Some(args) => args
            .args
            .iter()
            .filter_map(|arg| match arg {
                GenericArgument::Type(ty) => Some(ty),
                _ => None,
            })
            .collect(),
        None => Vec::new(),
    }
}

#[derive(Clone, Debug)]
pub struct TokenizableError;

impl StdError for TokenizableError {
    fn source(&self) -> Option<&(dyn StdError + 'static)> {
        None
    }
}

impl Display for TokenizableError {
    fn fmt(&self, _f: &mut Formatter<'_>) -> FmtResult {
        unreachable!()
    }
}

impl ToTokens for TokenizableError {
    fn to_tokens(&self, _tokens: &mut TokenStream) {
        unreachable!()
    }
}