def build(self, response):
        """
        Deserialize the returned objects and return either a single Zenpy object, or a ResultGenerator in
        the case of multiple results.

        :param response: the requests Response object.
        """
        response_json = response.json()

        # Special case for ticket audits.
        if get_endpoint_path(self.api, response).startswith('/ticket_audits.json'):
            return TicketAuditGenerator(self, response_json)

        zenpy_objects = self.deserialize(response_json)

        # Collection of objects (eg, users/tickets)
        plural_object_type = as_plural(self.api.object_type)
        if plural_object_type in zenpy_objects:
            return ZendeskResultGenerator(self, response_json, response_objects=zenpy_objects[plural_object_type])

        # Here the response matches the API object_type, seems legit.
        if self.api.object_type in zenpy_objects:
            return zenpy_objects[self.api.object_type]

        # Could be anything, if we know of this object then return it.
        for zenpy_object_name in self.object_mapping.class_mapping:
            if zenpy_object_name in zenpy_objects:
                return zenpy_objects[zenpy_object_name]

        # Maybe a collection of known objects?
        for zenpy_object_name in self.object_mapping.class_mapping:
            plural_zenpy_object_name = as_plural(zenpy_object_name)
            if plural_zenpy_object_name in zenpy_objects:
                return ZendeskResultGenerator(self, response_json, object_type=plural_zenpy_object_name)

        # Bummer, bail out.
        raise ZenpyException("Unknown Response: " + str(response_json))
Deserialize the returned objects and return either a single Zenpy object, or a ResultGenerator in
        the case of multiple results.

        :param response: the requests Response object.