func SearchConnectors()

in internal/clients/kibana/connector.go [145:206]


func SearchConnectors(ctx context.Context, apiClient *clients.ApiClient, connectorName, spaceID, connectorTypeID string) ([]*models.KibanaActionConnector, diag.Diagnostics) {
	client, err := apiClient.GetKibanaConnectorsClient(ctx)
	if err != nil {
		return nil, diag.FromErr(err)
	}

	httpResp, err := client.GetConnectors(ctx, spaceID)

	if err != nil {
		return nil, diag.Errorf("unable to get connectors: [%v]", err)
	}

	defer httpResp.Body.Close()

	resp, err := connectors.ParseGetConnectorsResponse(httpResp)
	if err != nil {
		return nil, diag.Errorf("unable to parse connectors get response: [%v]", err)
	}

	if resp.JSON401 != nil {
		return nil, diag.Errorf("%s: %s", *resp.JSON401.Error, *resp.JSON401.Message)
	}

	if resp.JSON200 == nil {
		return nil, diag.Errorf("%s: %s", resp.Status(), string(resp.Body))
	}

	foundConnectors := []*models.KibanaActionConnector{}
	for _, connector := range *resp.JSON200 {
		if connector.Name != connectorName {
			continue
		}

		if connectorTypeID != "" && string(connector.ConnectorTypeId) != connectorTypeID {
			continue
		}

		//this marshaling and unmarshaling business allows us to create a type with unexported fields.
		bytes, err := json.Marshal(connector)
		if err != nil {
			return nil, diag.Errorf("cannot marshal connector: %v", err)
		}

		var respProps connectors.ConnectorResponseProperties
		err = json.Unmarshal(bytes, &respProps)
		if err != nil {
			return nil, diag.Errorf("cannot unmarshal connector: %v", err)
		}

		c, err := connectorResponseToModel(spaceID, respProps)
		if err != nil {
			return nil, diag.Errorf("unable to convert response to model: %v", err)
		}

		foundConnectors = append(foundConnectors, c)
	}
	if len(foundConnectors) == 0 {
		tflog.Debug(ctx, fmt.Sprintf("no connectors found with name [%s/%s] and type [%s]", spaceID, connectorName, connectorTypeID))
	}

	return foundConnectors, nil
}