public function send(Request $request)
 {
     $response = new Response($request->getDataFormat());
     $curl = new Curl();
     foreach ($request->headers as $header => $value) {
         $curl->setHeader($header, $value);
     }
     // Bind success callback.
     $curl->error(function ($curl) {
         dd($curl);
     });
     // Bind success callback.
     $curl->success(function ($curl) use(&$response) {
         $response->code = $curl->http_status_code;
         // Todo: convert string to document object.
         $response->document = $response->getDataFormat()->deserialize($curl->raw_response);
     });
     // Send the request.
     switch ($request->method) {
         case 'GET':
             $curl->get($request->url);
             break;
         case 'POST':
             $contentString = $request->getDataFormat()->serialize($request->document)->getContent();
             $curl->post($request->url, $contentString);
             break;
     }
     return $response;
 }