refac: move helper functions to utils
This commit is contained in:
parent
d1982ad8af
commit
3da357788b
3 changed files with 40 additions and 36 deletions
|
@ -1,15 +1,7 @@
|
||||||
use crate::ast::*;
|
use crate::ast::*;
|
||||||
|
use crate::utils::{is_option_type, vec_to_token_stream_2};
|
||||||
use proc_macro2::TokenStream as TokenStream2;
|
use proc_macro2::TokenStream as TokenStream2;
|
||||||
use quote::{quote, ToTokens, TokenStreamExt};
|
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 {
|
impl ToTokens for RootNamespace {
|
||||||
fn to_tokens(&self, tokens: &mut TokenStream2) {
|
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,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -4,9 +4,11 @@
|
||||||
mod ast;
|
mod ast;
|
||||||
mod expand;
|
mod expand;
|
||||||
mod parse;
|
mod parse;
|
||||||
|
mod utils;
|
||||||
|
|
||||||
extern crate proc_macro;
|
extern crate proc_macro;
|
||||||
extern crate proc_macro2;
|
extern crate proc_macro2;
|
||||||
|
|
||||||
use self::proc_macro::TokenStream;
|
use self::proc_macro::TokenStream;
|
||||||
use ast::RootNamespace;
|
use ast::RootNamespace;
|
||||||
use quote::ToTokens;
|
use quote::ToTokens;
|
||||||
|
|
37
itconfig-macro/src/utils.rs
Normal file
37
itconfig-macro/src/utils.rs
Normal 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,
|
||||||
|
}
|
||||||
|
}
|
Reference in a new issue