func()

in internal/loader/settings_client.go [42:88]


func (s *EtagSettingsClient) GetSettings(ctx context.Context, client *azappconfig.Client) (*SettingsResponse, error) {
	nullString := "\x00"
	settingsResponse := &SettingsResponse{}
	for filter, pageEtags := range s.etags {
		if filter.KeyFilter != nil {
			if filter.LabelFilter == nil {
				filter.LabelFilter = &nullString // NUL is escaped to \x00 in golang
			}
			selector := azappconfig.SettingSelector{
				KeyFilter:   filter.KeyFilter,
				LabelFilter: filter.LabelFilter,
				Fields:      azappconfig.AllSettingFields(),
			}

			conditions := make([]azcore.MatchConditions, 0)
			for _, etag := range pageEtags {
				conditions = append(conditions, azcore.MatchConditions{IfNoneMatch: etag})
			}

			pager := client.NewListSettingsPager(selector, &azappconfig.ListSettingsOptions{
				MatchConditions: conditions,
			})

			pageCount := 0
			for pager.More() {
				pageCount++
				page, err := pager.NextPage(context.Background())
				if err != nil {
					return nil, err
				}
				// If etag changed, return the non nil etags
				if page.ETag != nil {
					settingsResponse.Etags = make(map[acpv1.Selector][]*azcore.ETag)
					return settingsResponse, nil
				}
			}

			if pageCount != len(pageEtags) {
				settingsResponse.Etags = make(map[acpv1.Selector][]*azcore.ETag)
				return settingsResponse, nil
			}
		}
	}

	// no change in the settings, return nil etags
	return settingsResponse, nil
}