     }
 
     public func optionalUnarchivedValue<T: JSONCoding>(in json: Any, _ unarchiver: JSONUnarchiving) throws -> T? {
-        return try optionalAnyValue(in: json, unarchiver, transform: unarchiver.unarchived(with:))
+        return try optionalAnyValue(in: json, unarchiver) {
+            try unarchiver.unarchived(with: $0)
+        }
     }
 
     public func optionalUnarchivedValue<T: JSONCoding>(discardingErrorsIn json: Any, _ unarchiver: JSONUnarchiving) throws -> T? {

    }

    public func unarchivedValue<T: JSONCoding>(in json: Any, _ unarchiver: JSONUnarchiving) throws -> T {
        return try anyValue(in: json, unarchiver, transform: unarchiver.unarchived(with:))
    }

    public func optionalUnarchivedValues<T: JSONCoding>(mappedIn json: Any, _ unarchiver: JSONUnarchiving) throws -> [T]? {
        return try optionalValue(in: json, unarchiver, transform: unarchiver.unarchived(map:))
    }

    public func unarchivedValues<T: JSONCoding>(mappedIn json: Any, _ unarchiver: JSONUnarchiving) throws -> [T] {
        return try value(in: json, unarchiver, transform: unarchiver.unarchived(map:))
    }

    public func optionalUnarchivedValues<T: JSONCoding>(discardingErrorsMappedIn json: Any, _ unarchiver: JSONUnarchiving) throws -> [T]? {
        return try optionalValue(in: json, unarchiver, transform: unarchiver.unarchived(discardingErrorsMap:))
    }

    public func unarchivedValues<T: JSONCoding>(discardingErrorsMappedIn json: Any, _ unarchiver: JSONUnarchiving) throws -> [T] {
        return try value(in: json, unarchiver, transform: unarchiver.unarchived(discardingErrorsMap:))
    }

    public func optionalAnyValue<U>(in json: Any, _ unarchiver: JSONUnarchiving, transform: (Any) throws -> U) throws -> U? {
        let optionalValue = try optionalAnyValue(in: json)
        return try optionalValue.flatMap { value in
            try pushed(on: unarchiver, do: transform)
        }
    }

    public func optionalAnyValue<U>(in json: Any, _ unarchiver: JSONUnarchiving, optionalTransform: (Any) throws -> U?) throws -> U? {
        let optionalValue = try optionalAnyValue(in: json)
        return try optionalValue.flatMap { value in
            try pushed(on: unarchiver, do: optionalTransform)
        }
    }



    public func optionalKeyValue(in json: Any) throws -> JSONKey? {
        let keyValue: String? = try optionalValue(in: json)
        return keyValue.flatMap { JSONRandomKey(keyValue: $0) }
    }

    public func keyValue(in json: Any) throws -> JSONKey {
