=begin
#CRM Objects

#CRM objects such as companies, contacts, deals, line items, products, tickets, and quotes are standard objects in HubSpot’s CRM. These core building blocks support custom properties, store critical information, and play a central role in the HubSpot application.  ## Supported Object Types  This API provides access to collections of CRM objects, which return a map of property names to values. Each object type has its own set of default properties, which can be found by exploring the [CRM Object Properties API](https://developers.hubspot.com/docs/methods/crm-properties/crm-properties-overview).  |Object Type |Properties returned by default | |--|--| | `companies` | `name`, `domain` | | `contacts` | `firstname`, `lastname`, `email` | | `deals` | `dealname`, `amount`, `closedate`, `pipeline`, `dealstage` | | `products` | `name`, `description`, `price` | | `tickets` | `content`, `hs_pipeline`, `hs_pipeline_stage`, `hs_ticket_category`, `hs_ticket_priority`, `subject` |  Find a list of all properties for an object type using the [CRM Object Properties](https://developers.hubspot.com/docs/methods/crm-properties/get-properties) API. e.g. `GET https://api.hubapi.com/properties/v2/companies/properties`. Change the properties returned in the response using the `properties` array in the request body.

The version of the OpenAPI document: v3

Generated by: https://openapi-generator.tech
OpenAPI Generator version: 6.2.1

=end

module Hubspot
  module Crm
    module Objects
      class ApiError < ::StandardError
        attr_reader :code, :response_headers, :response_body

        # Usage examples:
        #   ApiError.new
        #   ApiError.new("message")
        #   ApiError.new(:code => 500, :response_headers => {}, :response_body => "")
        #   ApiError.new(:code => 404, :message => "Not Found")
        def initialize(arg = nil)
          if arg.is_a? Hash
            if arg.key?(:message) || arg.key?('message')
              super(arg[:message] || arg['message'])
            else
              super arg
            end

            arg.each do |k, v|
              instance_variable_set "@#{k}", v
            end
          else
            super arg
          end
        end

        # Override to_s to display a friendly error message
        def to_s
          message
        end

        def message
          if @message.nil?
            msg = "Error message: the server returns an error"
          else
            msg = @message
          end

          msg += "\nHTTP status code: #{code}" if code
          msg += "\nResponse headers: #{response_headers}" if response_headers
          msg += "\nResponse body: #{response_body}" if response_body

          msg
        end
      end
    end
  end
end
