refac: move helper functions to utils

This commit is contained in:
Dmitriy Pleshevskiy 2021-04-15 23:45:57 +03:00
parent d1982ad8af
commit 3da357788b
3 changed files with 40 additions and 36 deletions

View file

@ -1,15 +1,7 @@
use crate::ast::*;
use crate::utils::{is_option_type, vec_to_token_stream_2};
use proc_macro2::TokenStream as TokenStream2;
use quote::{quote, ToTokens, TokenStreamExt};
use syn::Path;
use syn::Type;
fn vec_to_token_stream_2<T>(input: &Vec<T>) -> Vec<TokenStream2>
where
T: ToTokens,
{
input.iter().map(|ns| ns.into_token_stream()).collect()
}
impl ToTokens for RootNamespace {
fn to_tokens(&self, tokens: &mut TokenStream2) {
@ -174,30 +166,3 @@ impl ToTokens for Variable {
}
}
}
fn path_ident(path: &Path) -> String {
path.segments
.iter()
.into_iter()
.fold(String::with_capacity(250), |mut acc, v| {
acc.push_str(&v.ident.to_string());
acc.push('|');
acc
})
}
fn is_option_path_ident(path_ident: String) -> bool {
vec!["Option|", "std|option|Option|", "core|option|Option|"]
.into_iter()
.find(|s| &path_ident == *s)
.is_some()
}
fn is_option_type(ty: &Type) -> bool {
match ty {
Type::Path(ty_path) => {
ty_path.qself.is_none() && is_option_path_ident(path_ident(&ty_path.path))
}
_ => false,
}
}

View file

@ -4,9 +4,11 @@
mod ast;
mod expand;
mod parse;
mod utils;
extern crate proc_macro;
extern crate proc_macro2;
use self::proc_macro::TokenStream;
use ast::RootNamespace;
use quote::ToTokens;

View file

@ -0,0 +1,37 @@
use proc_macro2::TokenStream as TokenStream2;
use quote::ToTokens;
use syn::{Path, Type};
pub fn vec_to_token_stream_2<T>(input: &Vec<T>) -> Vec<TokenStream2>
where
T: ToTokens,
{
input.iter().map(|ns| ns.into_token_stream()).collect()
}
fn path_ident(path: &Path) -> String {
path.segments
.iter()
.into_iter()
.fold(String::with_capacity(250), |mut acc, v| {
acc.push_str(&v.ident.to_string());
acc.push('|');
acc
})
}
fn is_option_path_ident(path_ident: String) -> bool {
vec!["Option|", "std|option|Option|", "core|option|Option|"]
.into_iter()
.find(|s| &path_ident == *s)
.is_some()
}
pub fn is_option_type(ty: &Type) -> bool {
match ty {
Type::Path(ty_path) => {
ty_path.qself.is_none() && is_option_path_ident(path_ident(&ty_path.path))
}
_ => false,
}
}