+pub fn attrs_derives_clone(attrs: &[syn::Attribute]) -> bool {
+ for attr in attrs.iter() {
+ let tokens_clone = attr.tokens.clone();
+ let mut token_iter = tokens_clone.into_iter();
+ if let Some(token) = token_iter.next() {
+ match token {
+ TokenTree::Group(g) => {
+ if format!("{}", single_ident_generic_path_to_ident(&attr.path).unwrap()) == "derive" {
+ for id in g.stream().into_iter() {
+ if let TokenTree::Ident(i) = id {
+ if i == "Clone" {
+ return true;
+ }
+ }
+ }
+ }
+ },
+ _ => {},
+ }
+ }
+ }
+ false
+}
+