                           from object: Any,
                           userInfo: [CodingUserInfoKey: Any] = [:]) throws -> T where T: Decodable {
         do {
-            return try _Decoder(object, options, userInfo).singleValueContainer().decode(type)
+            return try ObjectDecoder.Decoder(object, options, userInfo).singleValueContainer().decode(type)
         } catch let error as DecodingError {
             throw error
         } catch {

    }
}

extension _Decoder: SingleValueDecodingContainer {

    // MARK: - Swift.SingleValueDecodingContainer Methods


    fileprivate var options = Options()
}

extension ObjectDecoder {
    struct Decoder: Swift.Decoder {

        let object: Any

        fileprivate typealias Options = ObjectDecoder.Options
        private let options: Options

        fileprivate init(_ object: Any,
                         _ options: Options,
                         _ userInfo: [CodingUserInfoKey: Any],
                         _ codingPath: [CodingKey] = []) {
            self.object = object
            self.options = options
            self.userInfo = userInfo
            self.codingPath = codingPath
        }

        // MARK: - Swift.Decoder Methods

        let codingPath: [CodingKey]
        let userInfo: [CodingUserInfoKey: Any]
    }
}

extension ObjectDecoder.Decoder {
    func container<Key>(keyedBy type: Key.Type) throws -> KeyedDecodingContainer<Key> {
        return .init(_KeyedDecodingContainer<Key>(decoder: self, wrapping: try cast()))
    }
