func create_or_get_exchange()

in analytics-hub/snippets/create_listing_golang/main.go [176:216]


func create_or_get_exchange(ctx context.Context, client *analyticshub.Client, projectID, location, exchangeID string, isDCR bool) (*analyticshubpb.DataExchange, error) {
	req := &analyticshubpb.GetDataExchangeRequest{
		Name: fmt.Sprintf("projects/%s/locations/%s/dataExchanges/%s", projectID, location, exchangeID),
	}
	resp, err := client.GetDataExchange(ctx, req)
	if err != nil {
		println(err.Error())
		// Default: create regular Data Exchange / DefaultExchangeConfig
		sharingEnvironmentConfig := &analyticshubpb.SharingEnvironmentConfig{
			Environment: &analyticshubpb.SharingEnvironmentConfig_DefaultExchangeConfig_{},
		}
		exTitleTag := "Data Exchange"
		// if DataCleanRoom: create a Data Clean Room Data Exchange / DcrExchangeConfig
		if isDCR {
			sharingEnvironmentConfig = &analyticshubpb.SharingEnvironmentConfig{
				Environment: &analyticshubpb.SharingEnvironmentConfig_DcrExchangeConfig_{},
			}
			exTitleTag = "Data Clean Room"
		}
		req := &analyticshubpb.CreateDataExchangeRequest{
			Parent:         fmt.Sprintf("projects/%s/locations/%s", projectID, location),
			DataExchangeId: exchangeID,
			DataExchange: &analyticshubpb.DataExchange{
				DisplayName:              fmt.Sprintf("Example %s - created using golang API", exTitleTag),
				Description:              fmt.Sprintf("Example %s - created using golang API", exTitleTag),
				PrimaryContact:           "",
				Documentation:            "https://link.to.optional.documentation/",
				SharingEnvironmentConfig: sharingEnvironmentConfig,
			},
		}
		resp, err := client.CreateDataExchange(ctx, req)
		if err != nil {
			println(err.Error())
			return nil, err
		} else {
			return resp, nil
		}
	} else {
		return resp, nil
	}
}