class BaseError extends Error
  constructor: (msg) ->
    @message = msg

  toString: ->
    "#{@name}: #{@message}"

class HttpError extends BaseError
  constructor: (msg, @version, @action) ->
    super msg
    @name = 'HttpError'

class HttpTimeoutError extends BaseError
  constructor: (msg, @version, @action) ->
    super msg
    @name = 'HttpTimeoutError'

class ApiError extends BaseError
  constructor: (msg, @data, @version, @action) ->
    super msg
    @name = 'ApiError'

class TipsError extends BaseError
  constructor: (msg) ->
    super msg
    @name = 'TipsError'

class LoginError extends BaseError
  constructor: (msg) ->
    super msg
    @name = 'LoginError'

module.exports = {
  HttpError: HttpError
  HttpTimeoutError: HttpTimeoutError
  ApiError: ApiError
  TipsError: TipsError
  LoginError: LoginError
}