     }
     init(protobufBytes: [UInt8], extensions: ProtobufExtensionSet? = nil) throws {
         self.init()
-        try protobufBytes.withUnsafeBufferPointer { (bp) in
-            var protobufDecoder = ProtobufBinaryDecoder(protobufPointer: bp, extensions: extensions)
-            try protobufDecoder.decodeFullObject(message: &self)
+        try protobufBytes.withUnsafeBufferPointer { bp in
+            try decodeIntoSelf(from: bp, extensions: extensions)
         }
     }
 

    }

    init(protobuf: Data) throws {
        try self.init(protobufBytes: [UInt8](protobuf), extensions: nil)
    }

    init(protobuf: Data, extensions: ProtobufExtensionSet? = nil) throws {
        try self.init(protobufBytes: [UInt8](protobuf), extensions: extensions)
    }

    init(protobufBytes: [UInt8]) throws {

    }
    init(protobufBuffer: UnsafeBufferPointer<UInt8>, extensions: ProtobufExtensionSet? = nil) throws {
        self.init()
        try decodeIntoSelf(from: protobufBuffer, extensions: extensions)
    }
    private mutating func decodeIntoSelf(from bufferPointer: UnsafeBufferPointer<UInt8>, extensions: ProtobufExtensionSet?) throws {
        var protobufDecoder = ProtobufBinaryDecoder(protobufPointer: bufferPointer, extensions: extensions)
        try protobufDecoder.decodeFullObject(message: &self)
    }
}
