diff --git a/syntax/impls.rs b/syntax/impls.rs
index f4c5b05..a4b393a 100644
--- a/syntax/impls.rs
+++ b/syntax/impls.rs
@@ -1,13 +1,8 @@
-use crate::syntax::{
-    Api, CppName, ExternFn, Impl, Include, Namespace, Pair, Receiver, Ref, ResolvableName,
-    Signature, Slice, Symbol, Ty1, Type, Types,
-};
-use proc_macro2::{Ident, Span};
+use crate::syntax::{ExternFn, Impl, Include, Receiver, Ref, Signature, Slice, Ty1, Type};
 use std::borrow::Borrow;
 use std::hash::{Hash, Hasher};
 use std::mem;
 use std::ops::{Deref, DerefMut};
-use syn::Token;
 
 impl PartialEq for Include {
     fn eq(&self, other: &Include) -> bool {
@@ -297,86 +292,3 @@
         &self.ty
     }
 }
-
-impl Pair {
-    /// Use this constructor when the item can't have a different
-    /// name in Rust and C++.
-    pub fn new(ns: Namespace, ident: Ident) -> Self {
-        Self {
-            rust: ident.clone(),
-            cxx: CppName::new(ns, ident),
-        }
-    }
-
-    /// Use this constructor when attributes such as #[rust_name]
-    /// can be used to potentially give a different name in Rust vs C++.
-    pub fn new_from_differing_names(ns: Namespace, cxx_ident: Ident, rust_ident: Ident) -> Self {
-        Self {
-            rust: rust_ident,
-            cxx: CppName::new(ns, cxx_ident),
-        }
-    }
-}
-
-impl ResolvableName {
-    pub fn new(ident: Ident) -> Self {
-        Self { rust: ident }
-    }
-
-    pub fn make_self(span: Span) -> Self {
-        Self {
-            rust: Token![Self](span).into(),
-        }
-    }
-
-    pub fn is_self(&self) -> bool {
-        self.rust == "Self"
-    }
-
-    pub fn span(&self) -> Span {
-        self.rust.span()
-    }
-
-    pub fn to_symbol(&self, types: &Types) -> Symbol {
-        types.resolve(self).to_symbol()
-    }
-}
-
-impl Api {
-    pub fn get_namespace(&self) -> Option<&Namespace> {
-        match self {
-            Api::CxxFunction(cfn) => Some(&cfn.ident.cxx.ns),
-            Api::CxxType(cty) => Some(&cty.ident.cxx.ns),
-            Api::Enum(enm) => Some(&enm.ident.cxx.ns),
-            Api::Struct(strct) => Some(&strct.ident.cxx.ns),
-            Api::RustType(rty) => Some(&rty.ident.cxx.ns),
-            Api::RustFunction(rfn) => Some(&rfn.ident.cxx.ns),
-            Api::Impl(_) | Api::Include(_) | Api::TypeAlias(_) => None,
-        }
-    }
-}
-
-impl CppName {
-    pub fn new(ns: Namespace, ident: Ident) -> Self {
-        Self { ns, ident }
-    }
-
-    fn iter_all_segments(&self) -> impl Iterator<Item = &Ident> {
-        self.ns.iter().chain(std::iter::once(&self.ident))
-    }
-
-    fn join(&self, sep: &str) -> String {
-        self.iter_all_segments()
-            .map(|s| s.to_string())
-            .collect::<Vec<_>>()
-            .join(sep)
-    }
-
-    pub fn to_symbol(&self) -> Symbol {
-        Symbol::from_idents(self.iter_all_segments())
-    }
-
-    pub fn to_fully_qualified(&self) -> String {
-        format!("::{}", self.join("::"))
-    }
-}
