--- /dev/null
+module Faraday
+ class Error < StandardError; end
+ class MissingDependency < Error; end
+
+ class ClientError < Error
+ attr_reader :response
+
+ def initialize(ex, response = nil)
+ @wrapped_exception = nil
+ @response = response
+
+ if ex.respond_to?(:backtrace)
+ super(ex.message)
+ @wrapped_exception = ex
+ elsif ex.respond_to?(:each_key)
+ super("the server responded with status #{ex[:status]}")
+ @response = ex
+ else
+ super(ex.to_s)
+ end
+ end
+
+ def backtrace
+ if @wrapped_exception
+ @wrapped_exception.backtrace
+ else
+ super
+ end
+ end
+
+ def inspect
+ %(#<#{self.class}>)
+ end
+ end
+
+ class ConnectionFailed < ClientError; end
+ class ResourceNotFound < ClientError; end
+ class ParsingError < ClientError; end
+
+ class TimeoutError < ClientError
+ def initialize(ex = nil)
+ super(ex || "timeout")
+ end
+ end
+
+ class SSLError < ClientError
+ end
+
+ [:MissingDependency, :ClientError, :ConnectionFailed, :ResourceNotFound,
+ :ParsingError, :TimeoutError, :SSLError].each do |const|
+ Error.const_set(const, Faraday.const_get(const))
+ end
+end