 	public let baseUrl: String
 	public let client: Responder
 	
+	public var jsonDecoder = JSONDecoder()
+	
 	public enum Error: Swift.Error {
 		case invalidResponse
 		case invalidURL

		}
		let response = try client.respond(to: request)
		switch response.body {
		case .data(let bytes): return try JSON(bytes: bytes)
		case _: throw Error.invalidResponse
		}
	}

		self.client = client
	}
	
	open func performDecodableRequest<T: Decodable>(method: HTTP.Method = .get,
	                                                path components: [String] = [],
	                                                query: [String: CustomStringConvertible] = [:],
	                                                headers: [HeaderKey: String] = [:],
	                                                body: ContentBody = .empty,
	                                                decoder: JSONDecoder? = nil) throws -> T {
		let data = try performDataRequest(method: method, path: components, query: query, headers: headers, body: body)
		return try (decoder ?? jsonDecoder).decode(T.self, from: data)
	}
	
	@discardableResult
	open func performJSONRequest(method: HTTP.Method = .get,
	                             path components: [String] = [],
	                             query: [String: CustomStringConvertible] = [:],
	                             headers: [HeaderKey: String] = [:],
	                             body: ContentBody = .empty) throws -> JSON {
		let data = try performDataRequest(method: method, path: components, query: query, headers: headers, body: body)
		return try JSON(bytes: data.makeBytes())
	}
	
	private func performDataRequest(method: HTTP.Method = .get,
	                             path components: [String] = [],
	                             query: [String: CustomStringConvertible] = [:],
	                             headers: [HeaderKey: String] = [:],
	                             body: ContentBody = .empty) throws -> Data {
		guard let path = components.joined(separator: "/").addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) else {
			throw Error.invalidURL
		}
