         if isAtEnd { throw _valueNotFound(at: codingPath + [currentKey], type, "Unkeyed container is at end.") }
     }
 
-    private mutating func currentDecoder<T>(closure: (_Decoder) throws -> T) throws -> T {
+    private mutating func currentDecoder<T>(closure: (ObjectDecoder.Decoder) throws -> T) throws -> T {
         try throwErrorIfAtEnd(T.self)
         let decoded: T = try closure(decoder.decoder(referencing: currentObject, as: currentKey))
         currentIndex += 1

        return object
    }

    private func decoder(for key: CodingKey) throws -> _Decoder {
        return decoder.decoder(referencing: try object(for: key), as: key)
    }
}

struct _UnkeyedDecodingContainer: UnkeyedDecodingContainer { // swiftlint:disable:this type_name

    private let decoder: _Decoder
    private let array: [Any]

    fileprivate init(decoder: _Decoder, wrapping array: [Any]) {
        self.decoder = decoder
        self.array = array
        self.currentIndex = 0

    }
}

extension ObjectDecoder.Decoder: SingleValueDecodingContainer {

    // MARK: - Swift.SingleValueDecodingContainer Methods

