     case IdentifyingTree(String,[CoderTreeValue])
 }
 
+/// Byte header to identify CoderTreeValue in a byte array
 internal enum CerealCoderTreeValueType: UInt8 {
     case String = 1
     case Int = 2


// MARK: Helpers

private func toByteArray<T>(value: T) -> [UInt8] {
    var unsafeValue = value
    return withUnsafePointer(&unsafeValue) {
        Array(UnsafeBufferPointer(start: UnsafePointer<UInt8>($0), count: sizeof(T)))
    }
}

private func fromByteArray<T>(value: [UInt8], _: T.Type) -> T {
    return value.withUnsafeBufferPointer {
        return UnsafePointer<T>($0.baseAddress).memory
    }
}

private func countValue<T>(from: [UInt8]) -> T {
    return from.withUnsafeBufferPointer({
        UnsafePointer<T>($0.baseAddress).memory
    })
}

private func stringEntriesCount(array: [CoderTreeValue]) -> Int {
    var result = 0
    for item in array {


// MARK: Types

/// Recursive tree enum that represents data being encoded/decoded
internal indirect enum CoderTreeValue {
    case StringValue(String)
    case IntValue(Int)
