Stop using ast_struct! for non-ast structs
diff --git a/src/generics.rs b/src/generics.rs
index 08f4619..f989795 100644
--- a/src/generics.rs
+++ b/src/generics.rs
@@ -15,22 +15,22 @@
 }
 
 #[cfg(feature = "printing")]
-ast_struct! {
-    /// Returned by `Generics::split_for_impl`.
-    pub struct ImplGenerics<'a>(&'a Generics);
-}
+#[cfg_attr(feature = "extra-traits", derive(Debug, Eq, PartialEq, Hash))]
+#[cfg_attr(feature = "clone-impls", derive(Clone))]
+/// Returned by `Generics::split_for_impl`.
+pub struct ImplGenerics<'a>(&'a Generics);
 
 #[cfg(feature = "printing")]
-ast_struct! {
-    /// Returned by `Generics::split_for_impl`.
-    pub struct TyGenerics<'a>(&'a Generics);
-}
+#[cfg_attr(feature = "extra-traits", derive(Debug, Eq, PartialEq, Hash))]
+#[cfg_attr(feature = "clone-impls", derive(Clone))]
+/// Returned by `Generics::split_for_impl`.
+pub struct TyGenerics<'a>(&'a Generics);
 
 #[cfg(feature = "printing")]
-ast_struct! {
-    /// Returned by `TyGenerics::as_turbofish`.
-    pub struct Turbofish<'a>(&'a Generics);
-}
+#[cfg_attr(feature = "extra-traits", derive(Debug, Eq, PartialEq, Hash))]
+#[cfg_attr(feature = "clone-impls", derive(Clone))]
+/// Returned by `TyGenerics::as_turbofish`.
+pub struct Turbofish<'a>(&'a Generics);
 
 #[cfg(feature = "printing")]
 impl Generics {
diff --git a/src/ty.rs b/src/ty.rs
index 953c2c1..d599283 100644
--- a/src/ty.rs
+++ b/src/ty.rs
@@ -119,9 +119,9 @@
 }
 
 #[cfg(feature = "printing")]
-ast_struct! {
-    pub struct PathTokens<'a>(pub &'a Option<QSelf>, pub &'a Path);
-}
+#[cfg_attr(feature = "extra-traits", derive(Debug, Eq, PartialEq, Hash))]
+#[cfg_attr(feature = "clone-impls", derive(Clone))]
+pub struct PathTokens<'a>(pub &'a Option<QSelf>, pub &'a Path);
 
 impl<T> From<T> for Path
     where T: Into<PathSegment>