     }
 }
 
-final class URLTransform: Transform {
+public class URLTransform: Transform {
     typealias Object = URL
 
     func transform(input: Any) -> URL? {

        }
    }

    func value<T: Transform>(_ index: Int, using transform: T) throws -> T.Object {
        if index >= 0, index < jsonArray?.count ?? 0, let object = jsonArray?[index], let t = transform.transform(input: object) {
            return t
        } else {

import Foundation

public class Mapper {

    private let jsonObject: [String: Any]?
    private let jsonArray: [Any]?

    public init(_ json: [String: Any]) {
        self.jsonObject = json
        self.jsonArray = nil
    }

    public init(_ json: [Any]) {
        self.jsonObject = nil
        self.jsonArray = json
    }
    
    public func value<T: Transform>(_ key: String, using transform: T) throws -> T.Object {
        if let object = jsonObject?[key], let t = transform.transform(input: object) {
            return t
        } else {
