     }
 
     private func unbox<T: Decodable>(for key: Key) throws -> T {
-        return try decoder(for: key).cast(object(for: key))
+        return try decoder(for: key).unbox(object(for: key))
     }
 }
 


    // MARK: -

    fileprivate func cast<T: Decodable>(_ object: Any) throws -> T {
        if let strategy = options.decodingStrategies[T.self] {
            return try strategy.closure(self)
        } else {
            guard let value = object as? T else {
                throw _typeMismatch(at: codingPath, expectation: T.self, reality: object)
            }
            return value
        }
    }

    /// create a new `_Decoder` instance referencing `object` as `key` inheriting `userInfo`


    private mutating func unbox<T: Decodable>() throws -> T {
        try throwErrorIfAtEnd(T.self)
        let decoded: T = try currentDecoder.unbox(currentObject)
        currentIndex += 1
        return decoded
    }
