diff --git a/rocksdb/db.pxd b/rocksdb/db.pxd
index e5c239cd6b97ffa42c1592988b0bc82e83333524..6cc4d11275e4ceefacf49771e1c4577a5967c7fc 100644
--- a/rocksdb/db.pxd
+++ b/rocksdb/db.pxd
@@ -4,6 +4,7 @@ from .status cimport Status
 from libcpp cimport bool as cpp_bool
 from libcpp.string cimport string
 from libcpp.vector cimport vector
+from .types cimport SequenceNumber
 from .slice_ cimport Slice
 from .snapshot cimport Snapshot
 from .iterator cimport Iterator
@@ -39,7 +40,6 @@ cdef extern from "cpp/write_batch_iter_helper.hpp" namespace "py_rocks":
 
 
 cdef extern from "rocksdb/db.h" namespace "rocksdb":
-    ctypedef uint64_t SequenceNumber
     string kDefaultColumnFamilyName
 
     cdef struct LiveFileMetaData:
diff --git a/rocksdb/types.pxd b/rocksdb/types.pxd
new file mode 100644
index 0000000000000000000000000000000000000000..b8c9ca98bd644de835da33fdd959f4326e225d56
--- /dev/null
+++ b/rocksdb/types.pxd
@@ -0,0 +1,28 @@
+from libc.stdint cimport uint64_t, uint32_t
+from .slice_ cimport Slice
+from libcpp.string cimport string
+from libcpp cimport bool as cpp_bool
+
+cdef extern from "rocksdb/types.h" namespace "rocksdb":
+    ctypedef uint64_t SequenceNumber
+
+    cdef enum EntryType:
+        kEntryPut
+        kEntryDelete
+        kEntrySingleDelete
+        kEntryMerge
+        kEntryRangeDeletion
+        kEntryBlobIndex
+        kEntryOther
+
+    cdef cppclass FullKey:
+        Slice user_key
+        SequenceNumber sequence
+        EntryType type
+
+        FullKey() except+
+        FullKey(const Slice&, const SequenceNumber&, EntryType) except+
+        string DebugString(cpp_bool hex) nogil except+
+        void clear() nogil except+
+
+    cpp_bool ParseFullKey(const Slice&, FullKey*)