services/google/networkservices/beta/http_route_internal.go (5,729 lines of code) (raw):

// Copyright 2025 Google LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package beta import ( "bytes" "context" "encoding/json" "fmt" "io/ioutil" "strings" "github.com/GoogleCloudPlatform/declarative-resource-client-library/dcl" "github.com/GoogleCloudPlatform/declarative-resource-client-library/dcl/operations" ) func (r *HttpRoute) validate() error { if err := dcl.Required(r, "name"); err != nil { return err } if err := dcl.Required(r, "hostnames"); err != nil { return err } if err := dcl.Required(r, "rules"); err != nil { return err } if err := dcl.RequiredParameter(r.Project, "Project"); err != nil { return err } if err := dcl.RequiredParameter(r.Location, "Location"); err != nil { return err } return nil } func (r *HttpRouteRules) validate() error { if !dcl.IsEmptyValueIndirect(r.Action) { if err := r.Action.validate(); err != nil { return err } } return nil } func (r *HttpRouteRulesMatches) validate() error { if err := dcl.ValidateAtMostOneOfFieldsSet([]string{"FullPathMatch", "PrefixMatch", "RegexMatch"}, r.FullPathMatch, r.PrefixMatch, r.RegexMatch); err != nil { return err } return nil } func (r *HttpRouteRulesMatchesHeaders) validate() error { if err := dcl.ValidateAtMostOneOfFieldsSet([]string{"ExactMatch", "RegexMatch", "PrefixMatch", "PresentMatch", "SuffixMatch", "RangeMatch"}, r.ExactMatch, r.RegexMatch, r.PrefixMatch, r.PresentMatch, r.SuffixMatch, r.RangeMatch); err != nil { return err } if !dcl.IsEmptyValueIndirect(r.RangeMatch) { if err := r.RangeMatch.validate(); err != nil { return err } } return nil } func (r *HttpRouteRulesMatchesHeadersRangeMatch) validate() error { return nil } func (r *HttpRouteRulesMatchesQueryParameters) validate() error { if err := dcl.ValidateAtMostOneOfFieldsSet([]string{"ExactMatch", "RegexMatch", "PresentMatch"}, r.ExactMatch, r.RegexMatch, r.PresentMatch); err != nil { return err } return nil } func (r *HttpRouteRulesAction) validate() error { if !dcl.IsEmptyValueIndirect(r.Redirect) { if err := r.Redirect.validate(); err != nil { return err } } if !dcl.IsEmptyValueIndirect(r.FaultInjectionPolicy) { if err := r.FaultInjectionPolicy.validate(); err != nil { return err } } if !dcl.IsEmptyValueIndirect(r.RequestHeaderModifier) { if err := r.RequestHeaderModifier.validate(); err != nil { return err } } if !dcl.IsEmptyValueIndirect(r.ResponseHeaderModifier) { if err := r.ResponseHeaderModifier.validate(); err != nil { return err } } if !dcl.IsEmptyValueIndirect(r.UrlRewrite) { if err := r.UrlRewrite.validate(); err != nil { return err } } if !dcl.IsEmptyValueIndirect(r.RetryPolicy) { if err := r.RetryPolicy.validate(); err != nil { return err } } if !dcl.IsEmptyValueIndirect(r.RequestMirrorPolicy) { if err := r.RequestMirrorPolicy.validate(); err != nil { return err } } if !dcl.IsEmptyValueIndirect(r.CorsPolicy) { if err := r.CorsPolicy.validate(); err != nil { return err } } return nil } func (r *HttpRouteRulesActionDestinations) validate() error { return nil } func (r *HttpRouteRulesActionRedirect) validate() error { return nil } func (r *HttpRouteRulesActionFaultInjectionPolicy) validate() error { if !dcl.IsEmptyValueIndirect(r.Delay) { if err := r.Delay.validate(); err != nil { return err } } if !dcl.IsEmptyValueIndirect(r.Abort) { if err := r.Abort.validate(); err != nil { return err } } return nil } func (r *HttpRouteRulesActionFaultInjectionPolicyDelay) validate() error { return nil } func (r *HttpRouteRulesActionFaultInjectionPolicyAbort) validate() error { return nil } func (r *HttpRouteRulesActionRequestHeaderModifier) validate() error { return nil } func (r *HttpRouteRulesActionResponseHeaderModifier) validate() error { return nil } func (r *HttpRouteRulesActionUrlRewrite) validate() error { return nil } func (r *HttpRouteRulesActionRetryPolicy) validate() error { return nil } func (r *HttpRouteRulesActionRequestMirrorPolicy) validate() error { if !dcl.IsEmptyValueIndirect(r.Destination) { if err := r.Destination.validate(); err != nil { return err } } return nil } func (r *HttpRouteRulesActionRequestMirrorPolicyDestination) validate() error { return nil } func (r *HttpRouteRulesActionCorsPolicy) validate() error { return nil } func (r *HttpRoute) basePath() string { params := map[string]interface{}{} return dcl.Nprintf("https://networkservices.googleapis.com/v1beta1/", params) } func (r *HttpRoute) getURL(userBasePath string) (string, error) { nr := r.urlNormalized() params := map[string]interface{}{ "project": dcl.ValueOrEmptyString(nr.Project), "location": dcl.ValueOrEmptyString(nr.Location), "name": dcl.ValueOrEmptyString(nr.Name), } return dcl.URL("projects/{{project}}/locations/{{location}}/httpRoutes/{{name}}", nr.basePath(), userBasePath, params), nil } func (r *HttpRoute) listURL(userBasePath string) (string, error) { nr := r.urlNormalized() params := map[string]interface{}{ "project": dcl.ValueOrEmptyString(nr.Project), "location": dcl.ValueOrEmptyString(nr.Location), } return dcl.URL("projects/{{project}}/locations/{{location}}/httpRoutes", nr.basePath(), userBasePath, params), nil } func (r *HttpRoute) createURL(userBasePath string) (string, error) { nr := r.urlNormalized() params := map[string]interface{}{ "project": dcl.ValueOrEmptyString(nr.Project), "location": dcl.ValueOrEmptyString(nr.Location), "name": dcl.ValueOrEmptyString(nr.Name), } return dcl.URL("projects/{{project}}/locations/{{location}}/httpRoutes?httpRouteId={{name}}", nr.basePath(), userBasePath, params), nil } func (r *HttpRoute) deleteURL(userBasePath string) (string, error) { nr := r.urlNormalized() params := map[string]interface{}{ "project": dcl.ValueOrEmptyString(nr.Project), "location": dcl.ValueOrEmptyString(nr.Location), "name": dcl.ValueOrEmptyString(nr.Name), } return dcl.URL("projects/{{project}}/locations/{{location}}/httpRoutes/{{name}}", nr.basePath(), userBasePath, params), nil } // httpRouteApiOperation represents a mutable operation in the underlying REST // API such as Create, Update, or Delete. type httpRouteApiOperation interface { do(context.Context, *HttpRoute, *Client) error } // newUpdateHttpRouteUpdateHttpRouteRequest creates a request for an // HttpRoute resource's UpdateHttpRoute update type by filling in the update // fields based on the intended state of the resource. func newUpdateHttpRouteUpdateHttpRouteRequest(ctx context.Context, f *HttpRoute, c *Client) (map[string]interface{}, error) { req := map[string]interface{}{} res := f _ = res if v, err := dcl.DeriveField("projects/%s/locations/global/httpRoutes/%s", f.Name, dcl.SelfLinkToName(f.Project), dcl.SelfLinkToName(f.Name)); err != nil { return nil, fmt.Errorf("error expanding Name into name: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { req["name"] = v } if v := f.Description; !dcl.IsEmptyValueIndirect(v) { req["description"] = v } if v := f.Hostnames; v != nil { req["hostnames"] = v } if v := f.Meshes; v != nil { req["meshes"] = v } if v := f.Gateways; v != nil { req["gateways"] = v } if v := f.Labels; !dcl.IsEmptyValueIndirect(v) { req["labels"] = v } if v, err := expandHttpRouteRulesSlice(c, f.Rules, res); err != nil { return nil, fmt.Errorf("error expanding Rules into rules: %w", err) } else if v != nil { req["rules"] = v } req["name"] = fmt.Sprintf("projects/%s/locations/%s/httpRoutes/%s", *f.Project, *f.Location, *f.Name) return req, nil } // marshalUpdateHttpRouteUpdateHttpRouteRequest converts the update into // the final JSON request body. func marshalUpdateHttpRouteUpdateHttpRouteRequest(c *Client, m map[string]interface{}) ([]byte, error) { return json.Marshal(m) } type updateHttpRouteUpdateHttpRouteOperation struct { // If the update operation has the REQUIRES_APPLY_OPTIONS trait, this will be populated. // Usually it will be nil - this is to prevent us from accidentally depending on apply // options, which should usually be unnecessary. ApplyOptions []dcl.ApplyOption FieldDiffs []*dcl.FieldDiff } // do creates a request and sends it to the appropriate URL. In most operations, // do will transcribe a subset of the resource into a request object and send a // PUT request to a single URL. func (op *updateHttpRouteUpdateHttpRouteOperation) do(ctx context.Context, r *HttpRoute, c *Client) error { _, err := c.GetHttpRoute(ctx, r) if err != nil { return err } u, err := r.updateURL(c.Config.BasePath, "UpdateHttpRoute") if err != nil { return err } mask := dcl.UpdateMask(op.FieldDiffs) u, err = dcl.AddQueryParams(u, map[string]string{"updateMask": mask}) if err != nil { return err } req, err := newUpdateHttpRouteUpdateHttpRouteRequest(ctx, r, c) if err != nil { return err } c.Config.Logger.InfoWithContextf(ctx, "Created update: %#v", req) body, err := marshalUpdateHttpRouteUpdateHttpRouteRequest(c, req) if err != nil { return err } resp, err := dcl.SendRequest(ctx, c.Config, "PATCH", u, bytes.NewBuffer(body), c.Config.RetryProvider) if err != nil { return err } var o operations.StandardGCPOperation if err := dcl.ParseResponse(resp.Response, &o); err != nil { return err } err = o.Wait(context.WithValue(ctx, dcl.DoNotLogRequestsKey, true), c.Config, r.basePath(), "GET") if err != nil { return err } return nil } func (c *Client) listHttpRouteRaw(ctx context.Context, r *HttpRoute, pageToken string, pageSize int32) ([]byte, error) { u, err := r.urlNormalized().listURL(c.Config.BasePath) if err != nil { return nil, err } m := make(map[string]string) if pageToken != "" { m["pageToken"] = pageToken } if pageSize != HttpRouteMaxPage { m["pageSize"] = fmt.Sprintf("%v", pageSize) } u, err = dcl.AddQueryParams(u, m) if err != nil { return nil, err } resp, err := dcl.SendRequest(ctx, c.Config, "GET", u, &bytes.Buffer{}, c.Config.RetryProvider) if err != nil { return nil, err } defer resp.Response.Body.Close() return ioutil.ReadAll(resp.Response.Body) } type listHttpRouteOperation struct { HttpRoutes []map[string]interface{} `json:"httpRoutes"` Token string `json:"nextPageToken"` } func (c *Client) listHttpRoute(ctx context.Context, r *HttpRoute, pageToken string, pageSize int32) ([]*HttpRoute, string, error) { b, err := c.listHttpRouteRaw(ctx, r, pageToken, pageSize) if err != nil { return nil, "", err } var m listHttpRouteOperation if err := json.Unmarshal(b, &m); err != nil { return nil, "", err } var l []*HttpRoute for _, v := range m.HttpRoutes { res, err := unmarshalMapHttpRoute(v, c, r) if err != nil { return nil, m.Token, err } res.Project = r.Project res.Location = r.Location l = append(l, res) } return l, m.Token, nil } func (c *Client) deleteAllHttpRoute(ctx context.Context, f func(*HttpRoute) bool, resources []*HttpRoute) error { var errors []string for _, res := range resources { if f(res) { // We do not want deleteAll to fail on a deletion or else it will stop deleting other resources. err := c.DeleteHttpRoute(ctx, res) if err != nil { errors = append(errors, err.Error()) } } } if len(errors) > 0 { return fmt.Errorf("%v", strings.Join(errors, "\n")) } else { return nil } } type deleteHttpRouteOperation struct{} func (op *deleteHttpRouteOperation) do(ctx context.Context, r *HttpRoute, c *Client) error { r, err := c.GetHttpRoute(ctx, r) if err != nil { if dcl.IsNotFound(err) { c.Config.Logger.InfoWithContextf(ctx, "HttpRoute not found, returning. Original error: %v", err) return nil } c.Config.Logger.WarningWithContextf(ctx, "GetHttpRoute checking for existence. error: %v", err) return err } u, err := r.deleteURL(c.Config.BasePath) if err != nil { return err } // Delete should never have a body body := &bytes.Buffer{} resp, err := dcl.SendRequest(ctx, c.Config, "DELETE", u, body, c.Config.RetryProvider) if err != nil { return err } // wait for object to be deleted. var o operations.StandardGCPOperation if err := dcl.ParseResponse(resp.Response, &o); err != nil { return err } if err := o.Wait(context.WithValue(ctx, dcl.DoNotLogRequestsKey, true), c.Config, r.basePath(), "GET"); err != nil { return err } // We saw a race condition where for some successful delete operation, the Get calls returned resources for a short duration. // This is the reason we are adding retry to handle that case. retriesRemaining := 10 dcl.Do(ctx, func(ctx context.Context) (*dcl.RetryDetails, error) { _, err := c.GetHttpRoute(ctx, r) if dcl.IsNotFound(err) { return nil, nil } if retriesRemaining > 0 { retriesRemaining-- return &dcl.RetryDetails{}, dcl.OperationNotDone{} } return nil, dcl.NotDeletedError{ExistingResource: r} }, c.Config.RetryProvider) return nil } // Create operations are similar to Update operations, although they do not have // specific request objects. The Create request object is the json encoding of // the resource, which is modified by res.marshal to form the base request body. type createHttpRouteOperation struct { response map[string]interface{} } func (op *createHttpRouteOperation) FirstResponse() (map[string]interface{}, bool) { return op.response, len(op.response) > 0 } func (op *createHttpRouteOperation) do(ctx context.Context, r *HttpRoute, c *Client) error { c.Config.Logger.InfoWithContextf(ctx, "Attempting to create %v", r) u, err := r.createURL(c.Config.BasePath) if err != nil { return err } req, err := r.marshal(c) if err != nil { return err } resp, err := dcl.SendRequest(ctx, c.Config, "POST", u, bytes.NewBuffer(req), c.Config.RetryProvider) if err != nil { return err } // wait for object to be created. var o operations.StandardGCPOperation if err := dcl.ParseResponse(resp.Response, &o); err != nil { return err } if err := o.Wait(context.WithValue(ctx, dcl.DoNotLogRequestsKey, true), c.Config, r.basePath(), "GET"); err != nil { c.Config.Logger.Warningf("Creation failed after waiting for operation: %v", err) return err } c.Config.Logger.InfoWithContextf(ctx, "Successfully waited for operation") op.response, _ = o.FirstResponse() if _, err := c.GetHttpRoute(ctx, r); err != nil { c.Config.Logger.WarningWithContextf(ctx, "get returned error: %v", err) return err } return nil } func (c *Client) getHttpRouteRaw(ctx context.Context, r *HttpRoute) ([]byte, error) { u, err := r.getURL(c.Config.BasePath) if err != nil { return nil, err } resp, err := dcl.SendRequest(ctx, c.Config, "GET", u, &bytes.Buffer{}, c.Config.RetryProvider) if err != nil { return nil, err } defer resp.Response.Body.Close() b, err := ioutil.ReadAll(resp.Response.Body) if err != nil { return nil, err } return b, nil } func (c *Client) httpRouteDiffsForRawDesired(ctx context.Context, rawDesired *HttpRoute, opts ...dcl.ApplyOption) (initial, desired *HttpRoute, diffs []*dcl.FieldDiff, err error) { c.Config.Logger.InfoWithContext(ctx, "Fetching initial state...") // First, let us see if the user provided a state hint. If they did, we will start fetching based on that. var fetchState *HttpRoute if sh := dcl.FetchStateHint(opts); sh != nil { if r, ok := sh.(*HttpRoute); !ok { c.Config.Logger.WarningWithContextf(ctx, "Initial state hint was of the wrong type; expected HttpRoute, got %T", sh) } else { fetchState = r } } if fetchState == nil { fetchState = rawDesired } // 1.2: Retrieval of raw initial state from API rawInitial, err := c.GetHttpRoute(ctx, fetchState) if rawInitial == nil { if !dcl.IsNotFound(err) { c.Config.Logger.WarningWithContextf(ctx, "Failed to retrieve whether a HttpRoute resource already exists: %s", err) return nil, nil, nil, fmt.Errorf("failed to retrieve HttpRoute resource: %v", err) } c.Config.Logger.InfoWithContext(ctx, "Found that HttpRoute resource did not exist.") // Perform canonicalization to pick up defaults. desired, err = canonicalizeHttpRouteDesiredState(rawDesired, rawInitial) return nil, desired, nil, err } c.Config.Logger.InfoWithContextf(ctx, "Found initial state for HttpRoute: %v", rawInitial) c.Config.Logger.InfoWithContextf(ctx, "Initial desired state for HttpRoute: %v", rawDesired) // The Get call applies postReadExtract and so the result may contain fields that are not part of API version. if err := extractHttpRouteFields(rawInitial); err != nil { return nil, nil, nil, err } // 1.3: Canonicalize raw initial state into initial state. initial, err = canonicalizeHttpRouteInitialState(rawInitial, rawDesired) if err != nil { return nil, nil, nil, err } c.Config.Logger.InfoWithContextf(ctx, "Canonicalized initial state for HttpRoute: %v", initial) // 1.4: Canonicalize raw desired state into desired state. desired, err = canonicalizeHttpRouteDesiredState(rawDesired, rawInitial, opts...) if err != nil { return nil, nil, nil, err } c.Config.Logger.InfoWithContextf(ctx, "Canonicalized desired state for HttpRoute: %v", desired) // 2.1: Comparison of initial and desired state. diffs, err = diffHttpRoute(c, desired, initial, opts...) return initial, desired, diffs, err } func canonicalizeHttpRouteInitialState(rawInitial, rawDesired *HttpRoute) (*HttpRoute, error) { // TODO(magic-modules-eng): write canonicalizer once relevant traits are added. return rawInitial, nil } /* * Canonicalizers * * These are responsible for converting either a user-specified config or a * GCP API response to a standard format that can be used for difference checking. * */ func canonicalizeHttpRouteDesiredState(rawDesired, rawInitial *HttpRoute, opts ...dcl.ApplyOption) (*HttpRoute, error) { if rawInitial == nil { // Since the initial state is empty, the desired state is all we have. // We canonicalize the remaining nested objects with nil to pick up defaults. return rawDesired, nil } canonicalDesired := &HttpRoute{} if dcl.PartialSelfLinkToSelfLink(rawDesired.Name, rawInitial.Name) { canonicalDesired.Name = rawInitial.Name } else { canonicalDesired.Name = rawDesired.Name } if dcl.StringCanonicalize(rawDesired.Description, rawInitial.Description) { canonicalDesired.Description = rawInitial.Description } else { canonicalDesired.Description = rawDesired.Description } if dcl.StringArrayCanonicalize(rawDesired.Hostnames, rawInitial.Hostnames) { canonicalDesired.Hostnames = rawInitial.Hostnames } else { canonicalDesired.Hostnames = rawDesired.Hostnames } if dcl.StringArrayCanonicalize(rawDesired.Meshes, rawInitial.Meshes) { canonicalDesired.Meshes = rawInitial.Meshes } else { canonicalDesired.Meshes = rawDesired.Meshes } if dcl.StringArrayCanonicalize(rawDesired.Gateways, rawInitial.Gateways) { canonicalDesired.Gateways = rawInitial.Gateways } else { canonicalDesired.Gateways = rawDesired.Gateways } if dcl.IsZeroValue(rawDesired.Labels) || (dcl.IsEmptyValueIndirect(rawDesired.Labels) && dcl.IsEmptyValueIndirect(rawInitial.Labels)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. canonicalDesired.Labels = rawInitial.Labels } else { canonicalDesired.Labels = rawDesired.Labels } canonicalDesired.Rules = canonicalizeHttpRouteRulesSlice(rawDesired.Rules, rawInitial.Rules, opts...) if dcl.NameToSelfLink(rawDesired.Project, rawInitial.Project) { canonicalDesired.Project = rawInitial.Project } else { canonicalDesired.Project = rawDesired.Project } if dcl.NameToSelfLink(rawDesired.Location, rawInitial.Location) { canonicalDesired.Location = rawInitial.Location } else { canonicalDesired.Location = rawDesired.Location } return canonicalDesired, nil } func canonicalizeHttpRouteNewState(c *Client, rawNew, rawDesired *HttpRoute) (*HttpRoute, error) { if dcl.IsEmptyValueIndirect(rawNew.Name) && dcl.IsEmptyValueIndirect(rawDesired.Name) { rawNew.Name = rawDesired.Name } else { if dcl.PartialSelfLinkToSelfLink(rawDesired.Name, rawNew.Name) { rawNew.Name = rawDesired.Name } } if dcl.IsEmptyValueIndirect(rawNew.Description) && dcl.IsEmptyValueIndirect(rawDesired.Description) { rawNew.Description = rawDesired.Description } else { if dcl.StringCanonicalize(rawDesired.Description, rawNew.Description) { rawNew.Description = rawDesired.Description } } if dcl.IsEmptyValueIndirect(rawNew.CreateTime) && dcl.IsEmptyValueIndirect(rawDesired.CreateTime) { rawNew.CreateTime = rawDesired.CreateTime } else { } if dcl.IsEmptyValueIndirect(rawNew.UpdateTime) && dcl.IsEmptyValueIndirect(rawDesired.UpdateTime) { rawNew.UpdateTime = rawDesired.UpdateTime } else { } if dcl.IsEmptyValueIndirect(rawNew.Hostnames) && dcl.IsEmptyValueIndirect(rawDesired.Hostnames) { rawNew.Hostnames = rawDesired.Hostnames } else { if dcl.StringArrayCanonicalize(rawDesired.Hostnames, rawNew.Hostnames) { rawNew.Hostnames = rawDesired.Hostnames } } if dcl.IsEmptyValueIndirect(rawNew.Meshes) && dcl.IsEmptyValueIndirect(rawDesired.Meshes) { rawNew.Meshes = rawDesired.Meshes } else { if dcl.StringArrayCanonicalize(rawDesired.Meshes, rawNew.Meshes) { rawNew.Meshes = rawDesired.Meshes } } if dcl.IsEmptyValueIndirect(rawNew.Gateways) && dcl.IsEmptyValueIndirect(rawDesired.Gateways) { rawNew.Gateways = rawDesired.Gateways } else { if dcl.StringArrayCanonicalize(rawDesired.Gateways, rawNew.Gateways) { rawNew.Gateways = rawDesired.Gateways } } if dcl.IsEmptyValueIndirect(rawNew.Labels) && dcl.IsEmptyValueIndirect(rawDesired.Labels) { rawNew.Labels = rawDesired.Labels } else { } if dcl.IsEmptyValueIndirect(rawNew.Rules) && dcl.IsEmptyValueIndirect(rawDesired.Rules) { rawNew.Rules = rawDesired.Rules } else { rawNew.Rules = canonicalizeNewHttpRouteRulesSlice(c, rawDesired.Rules, rawNew.Rules) } rawNew.Project = rawDesired.Project rawNew.Location = rawDesired.Location if dcl.IsEmptyValueIndirect(rawNew.SelfLink) && dcl.IsEmptyValueIndirect(rawDesired.SelfLink) { rawNew.SelfLink = rawDesired.SelfLink } else { if dcl.StringCanonicalize(rawDesired.SelfLink, rawNew.SelfLink) { rawNew.SelfLink = rawDesired.SelfLink } } return rawNew, nil } func canonicalizeHttpRouteRules(des, initial *HttpRouteRules, opts ...dcl.ApplyOption) *HttpRouteRules { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &HttpRouteRules{} cDes.Matches = canonicalizeHttpRouteRulesMatchesSlice(des.Matches, initial.Matches, opts...) cDes.Action = canonicalizeHttpRouteRulesAction(des.Action, initial.Action, opts...) return cDes } func canonicalizeHttpRouteRulesSlice(des, initial []HttpRouteRules, opts ...dcl.ApplyOption) []HttpRouteRules { if des == nil { return initial } if len(des) != len(initial) { items := make([]HttpRouteRules, 0, len(des)) for _, d := range des { cd := canonicalizeHttpRouteRules(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]HttpRouteRules, 0, len(des)) for i, d := range des { cd := canonicalizeHttpRouteRules(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewHttpRouteRules(c *Client, des, nw *HttpRouteRules) *HttpRouteRules { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for HttpRouteRules while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } nw.Matches = canonicalizeNewHttpRouteRulesMatchesSlice(c, des.Matches, nw.Matches) nw.Action = canonicalizeNewHttpRouteRulesAction(c, des.Action, nw.Action) return nw } func canonicalizeNewHttpRouteRulesSet(c *Client, des, nw []HttpRouteRules) []HttpRouteRules { if des == nil { return nw } // Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw. var items []HttpRouteRules for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareHttpRouteRulesNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewHttpRouteRules(c, &d, &nw[matchedIndex])) nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...) } } // Also include elements in nw that are not matched in des. items = append(items, nw...) return items } func canonicalizeNewHttpRouteRulesSlice(c *Client, des, nw []HttpRouteRules) []HttpRouteRules { if des == nil { return nw } // Lengths are unequal. A diff will occur later, so we shouldn't canonicalize. // Return the original array. if len(des) != len(nw) { return nw } var items []HttpRouteRules for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewHttpRouteRules(c, &d, &n)) } return items } func canonicalizeHttpRouteRulesMatches(des, initial *HttpRouteRulesMatches, opts ...dcl.ApplyOption) *HttpRouteRulesMatches { if des == nil { return initial } if des.empty { return des } if des.FullPathMatch != nil || (initial != nil && initial.FullPathMatch != nil) { // Check if anything else is set. if dcl.AnySet(des.PrefixMatch, des.RegexMatch) { des.FullPathMatch = nil if initial != nil { initial.FullPathMatch = nil } } } if des.PrefixMatch != nil || (initial != nil && initial.PrefixMatch != nil) { // Check if anything else is set. if dcl.AnySet(des.FullPathMatch, des.RegexMatch) { des.PrefixMatch = nil if initial != nil { initial.PrefixMatch = nil } } } if des.RegexMatch != nil || (initial != nil && initial.RegexMatch != nil) { // Check if anything else is set. if dcl.AnySet(des.FullPathMatch, des.PrefixMatch) { des.RegexMatch = nil if initial != nil { initial.RegexMatch = nil } } } if initial == nil { return des } cDes := &HttpRouteRulesMatches{} if dcl.StringCanonicalize(des.FullPathMatch, initial.FullPathMatch) || dcl.IsZeroValue(des.FullPathMatch) { cDes.FullPathMatch = initial.FullPathMatch } else { cDes.FullPathMatch = des.FullPathMatch } if dcl.StringCanonicalize(des.PrefixMatch, initial.PrefixMatch) || dcl.IsZeroValue(des.PrefixMatch) { cDes.PrefixMatch = initial.PrefixMatch } else { cDes.PrefixMatch = des.PrefixMatch } if dcl.StringCanonicalize(des.RegexMatch, initial.RegexMatch) || dcl.IsZeroValue(des.RegexMatch) { cDes.RegexMatch = initial.RegexMatch } else { cDes.RegexMatch = des.RegexMatch } if dcl.BoolCanonicalize(des.IgnoreCase, initial.IgnoreCase) || dcl.IsZeroValue(des.IgnoreCase) { cDes.IgnoreCase = initial.IgnoreCase } else { cDes.IgnoreCase = des.IgnoreCase } cDes.Headers = canonicalizeHttpRouteRulesMatchesHeadersSlice(des.Headers, initial.Headers, opts...) cDes.QueryParameters = canonicalizeHttpRouteRulesMatchesQueryParametersSlice(des.QueryParameters, initial.QueryParameters, opts...) return cDes } func canonicalizeHttpRouteRulesMatchesSlice(des, initial []HttpRouteRulesMatches, opts ...dcl.ApplyOption) []HttpRouteRulesMatches { if des == nil { return initial } if len(des) != len(initial) { items := make([]HttpRouteRulesMatches, 0, len(des)) for _, d := range des { cd := canonicalizeHttpRouteRulesMatches(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]HttpRouteRulesMatches, 0, len(des)) for i, d := range des { cd := canonicalizeHttpRouteRulesMatches(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewHttpRouteRulesMatches(c *Client, des, nw *HttpRouteRulesMatches) *HttpRouteRulesMatches { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for HttpRouteRulesMatches while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringCanonicalize(des.FullPathMatch, nw.FullPathMatch) { nw.FullPathMatch = des.FullPathMatch } if dcl.StringCanonicalize(des.PrefixMatch, nw.PrefixMatch) { nw.PrefixMatch = des.PrefixMatch } if dcl.StringCanonicalize(des.RegexMatch, nw.RegexMatch) { nw.RegexMatch = des.RegexMatch } if dcl.BoolCanonicalize(des.IgnoreCase, nw.IgnoreCase) { nw.IgnoreCase = des.IgnoreCase } nw.Headers = canonicalizeNewHttpRouteRulesMatchesHeadersSlice(c, des.Headers, nw.Headers) nw.QueryParameters = canonicalizeNewHttpRouteRulesMatchesQueryParametersSlice(c, des.QueryParameters, nw.QueryParameters) return nw } func canonicalizeNewHttpRouteRulesMatchesSet(c *Client, des, nw []HttpRouteRulesMatches) []HttpRouteRulesMatches { if des == nil { return nw } // Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw. var items []HttpRouteRulesMatches for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareHttpRouteRulesMatchesNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewHttpRouteRulesMatches(c, &d, &nw[matchedIndex])) nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...) } } // Also include elements in nw that are not matched in des. items = append(items, nw...) return items } func canonicalizeNewHttpRouteRulesMatchesSlice(c *Client, des, nw []HttpRouteRulesMatches) []HttpRouteRulesMatches { if des == nil { return nw } // Lengths are unequal. A diff will occur later, so we shouldn't canonicalize. // Return the original array. if len(des) != len(nw) { return nw } var items []HttpRouteRulesMatches for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewHttpRouteRulesMatches(c, &d, &n)) } return items } func canonicalizeHttpRouteRulesMatchesHeaders(des, initial *HttpRouteRulesMatchesHeaders, opts ...dcl.ApplyOption) *HttpRouteRulesMatchesHeaders { if des == nil { return initial } if des.empty { return des } if des.ExactMatch != nil || (initial != nil && initial.ExactMatch != nil) { // Check if anything else is set. if dcl.AnySet(des.RegexMatch, des.PrefixMatch, des.PresentMatch, des.SuffixMatch, des.RangeMatch) { des.ExactMatch = nil if initial != nil { initial.ExactMatch = nil } } } if des.RegexMatch != nil || (initial != nil && initial.RegexMatch != nil) { // Check if anything else is set. if dcl.AnySet(des.ExactMatch, des.PrefixMatch, des.PresentMatch, des.SuffixMatch, des.RangeMatch) { des.RegexMatch = nil if initial != nil { initial.RegexMatch = nil } } } if des.PrefixMatch != nil || (initial != nil && initial.PrefixMatch != nil) { // Check if anything else is set. if dcl.AnySet(des.ExactMatch, des.RegexMatch, des.PresentMatch, des.SuffixMatch, des.RangeMatch) { des.PrefixMatch = nil if initial != nil { initial.PrefixMatch = nil } } } if des.PresentMatch != nil || (initial != nil && initial.PresentMatch != nil) { // Check if anything else is set. if dcl.AnySet(des.ExactMatch, des.RegexMatch, des.PrefixMatch, des.SuffixMatch, des.RangeMatch) { des.PresentMatch = nil if initial != nil { initial.PresentMatch = nil } } } if des.SuffixMatch != nil || (initial != nil && initial.SuffixMatch != nil) { // Check if anything else is set. if dcl.AnySet(des.ExactMatch, des.RegexMatch, des.PrefixMatch, des.PresentMatch, des.RangeMatch) { des.SuffixMatch = nil if initial != nil { initial.SuffixMatch = nil } } } if des.RangeMatch != nil || (initial != nil && initial.RangeMatch != nil) { // Check if anything else is set. if dcl.AnySet(des.ExactMatch, des.RegexMatch, des.PrefixMatch, des.PresentMatch, des.SuffixMatch) { des.RangeMatch = nil if initial != nil { initial.RangeMatch = nil } } } if initial == nil { return des } cDes := &HttpRouteRulesMatchesHeaders{} if dcl.StringCanonicalize(des.Header, initial.Header) || dcl.IsZeroValue(des.Header) { cDes.Header = initial.Header } else { cDes.Header = des.Header } if dcl.StringCanonicalize(des.ExactMatch, initial.ExactMatch) || dcl.IsZeroValue(des.ExactMatch) { cDes.ExactMatch = initial.ExactMatch } else { cDes.ExactMatch = des.ExactMatch } if dcl.StringCanonicalize(des.RegexMatch, initial.RegexMatch) || dcl.IsZeroValue(des.RegexMatch) { cDes.RegexMatch = initial.RegexMatch } else { cDes.RegexMatch = des.RegexMatch } if dcl.StringCanonicalize(des.PrefixMatch, initial.PrefixMatch) || dcl.IsZeroValue(des.PrefixMatch) { cDes.PrefixMatch = initial.PrefixMatch } else { cDes.PrefixMatch = des.PrefixMatch } if dcl.BoolCanonicalize(des.PresentMatch, initial.PresentMatch) || dcl.IsZeroValue(des.PresentMatch) { cDes.PresentMatch = initial.PresentMatch } else { cDes.PresentMatch = des.PresentMatch } if dcl.StringCanonicalize(des.SuffixMatch, initial.SuffixMatch) || dcl.IsZeroValue(des.SuffixMatch) { cDes.SuffixMatch = initial.SuffixMatch } else { cDes.SuffixMatch = des.SuffixMatch } cDes.RangeMatch = canonicalizeHttpRouteRulesMatchesHeadersRangeMatch(des.RangeMatch, initial.RangeMatch, opts...) if dcl.BoolCanonicalize(des.InvertMatch, initial.InvertMatch) || dcl.IsZeroValue(des.InvertMatch) { cDes.InvertMatch = initial.InvertMatch } else { cDes.InvertMatch = des.InvertMatch } return cDes } func canonicalizeHttpRouteRulesMatchesHeadersSlice(des, initial []HttpRouteRulesMatchesHeaders, opts ...dcl.ApplyOption) []HttpRouteRulesMatchesHeaders { if des == nil { return initial } if len(des) != len(initial) { items := make([]HttpRouteRulesMatchesHeaders, 0, len(des)) for _, d := range des { cd := canonicalizeHttpRouteRulesMatchesHeaders(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]HttpRouteRulesMatchesHeaders, 0, len(des)) for i, d := range des { cd := canonicalizeHttpRouteRulesMatchesHeaders(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewHttpRouteRulesMatchesHeaders(c *Client, des, nw *HttpRouteRulesMatchesHeaders) *HttpRouteRulesMatchesHeaders { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for HttpRouteRulesMatchesHeaders while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringCanonicalize(des.Header, nw.Header) { nw.Header = des.Header } if dcl.StringCanonicalize(des.ExactMatch, nw.ExactMatch) { nw.ExactMatch = des.ExactMatch } if dcl.StringCanonicalize(des.RegexMatch, nw.RegexMatch) { nw.RegexMatch = des.RegexMatch } if dcl.StringCanonicalize(des.PrefixMatch, nw.PrefixMatch) { nw.PrefixMatch = des.PrefixMatch } if dcl.BoolCanonicalize(des.PresentMatch, nw.PresentMatch) { nw.PresentMatch = des.PresentMatch } if dcl.StringCanonicalize(des.SuffixMatch, nw.SuffixMatch) { nw.SuffixMatch = des.SuffixMatch } nw.RangeMatch = canonicalizeNewHttpRouteRulesMatchesHeadersRangeMatch(c, des.RangeMatch, nw.RangeMatch) if dcl.BoolCanonicalize(des.InvertMatch, nw.InvertMatch) { nw.InvertMatch = des.InvertMatch } return nw } func canonicalizeNewHttpRouteRulesMatchesHeadersSet(c *Client, des, nw []HttpRouteRulesMatchesHeaders) []HttpRouteRulesMatchesHeaders { if des == nil { return nw } // Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw. var items []HttpRouteRulesMatchesHeaders for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareHttpRouteRulesMatchesHeadersNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewHttpRouteRulesMatchesHeaders(c, &d, &nw[matchedIndex])) nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...) } } // Also include elements in nw that are not matched in des. items = append(items, nw...) return items } func canonicalizeNewHttpRouteRulesMatchesHeadersSlice(c *Client, des, nw []HttpRouteRulesMatchesHeaders) []HttpRouteRulesMatchesHeaders { if des == nil { return nw } // Lengths are unequal. A diff will occur later, so we shouldn't canonicalize. // Return the original array. if len(des) != len(nw) { return nw } var items []HttpRouteRulesMatchesHeaders for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewHttpRouteRulesMatchesHeaders(c, &d, &n)) } return items } func canonicalizeHttpRouteRulesMatchesHeadersRangeMatch(des, initial *HttpRouteRulesMatchesHeadersRangeMatch, opts ...dcl.ApplyOption) *HttpRouteRulesMatchesHeadersRangeMatch { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &HttpRouteRulesMatchesHeadersRangeMatch{} if dcl.IsZeroValue(des.Start) || (dcl.IsEmptyValueIndirect(des.Start) && dcl.IsEmptyValueIndirect(initial.Start)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Start = initial.Start } else { cDes.Start = des.Start } if dcl.IsZeroValue(des.End) || (dcl.IsEmptyValueIndirect(des.End) && dcl.IsEmptyValueIndirect(initial.End)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.End = initial.End } else { cDes.End = des.End } return cDes } func canonicalizeHttpRouteRulesMatchesHeadersRangeMatchSlice(des, initial []HttpRouteRulesMatchesHeadersRangeMatch, opts ...dcl.ApplyOption) []HttpRouteRulesMatchesHeadersRangeMatch { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]HttpRouteRulesMatchesHeadersRangeMatch, 0, len(des)) for _, d := range des { cd := canonicalizeHttpRouteRulesMatchesHeadersRangeMatch(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]HttpRouteRulesMatchesHeadersRangeMatch, 0, len(des)) for i, d := range des { cd := canonicalizeHttpRouteRulesMatchesHeadersRangeMatch(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewHttpRouteRulesMatchesHeadersRangeMatch(c *Client, des, nw *HttpRouteRulesMatchesHeadersRangeMatch) *HttpRouteRulesMatchesHeadersRangeMatch { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for HttpRouteRulesMatchesHeadersRangeMatch while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } return nw } func canonicalizeNewHttpRouteRulesMatchesHeadersRangeMatchSet(c *Client, des, nw []HttpRouteRulesMatchesHeadersRangeMatch) []HttpRouteRulesMatchesHeadersRangeMatch { if des == nil { return nw } // Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw. var items []HttpRouteRulesMatchesHeadersRangeMatch for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareHttpRouteRulesMatchesHeadersRangeMatchNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewHttpRouteRulesMatchesHeadersRangeMatch(c, &d, &nw[matchedIndex])) nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...) } } // Also include elements in nw that are not matched in des. items = append(items, nw...) return items } func canonicalizeNewHttpRouteRulesMatchesHeadersRangeMatchSlice(c *Client, des, nw []HttpRouteRulesMatchesHeadersRangeMatch) []HttpRouteRulesMatchesHeadersRangeMatch { if des == nil { return nw } // Lengths are unequal. A diff will occur later, so we shouldn't canonicalize. // Return the original array. if len(des) != len(nw) { return nw } var items []HttpRouteRulesMatchesHeadersRangeMatch for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewHttpRouteRulesMatchesHeadersRangeMatch(c, &d, &n)) } return items } func canonicalizeHttpRouteRulesMatchesQueryParameters(des, initial *HttpRouteRulesMatchesQueryParameters, opts ...dcl.ApplyOption) *HttpRouteRulesMatchesQueryParameters { if des == nil { return initial } if des.empty { return des } if des.ExactMatch != nil || (initial != nil && initial.ExactMatch != nil) { // Check if anything else is set. if dcl.AnySet(des.RegexMatch, des.PresentMatch) { des.ExactMatch = nil if initial != nil { initial.ExactMatch = nil } } } if des.RegexMatch != nil || (initial != nil && initial.RegexMatch != nil) { // Check if anything else is set. if dcl.AnySet(des.ExactMatch, des.PresentMatch) { des.RegexMatch = nil if initial != nil { initial.RegexMatch = nil } } } if des.PresentMatch != nil || (initial != nil && initial.PresentMatch != nil) { // Check if anything else is set. if dcl.AnySet(des.ExactMatch, des.RegexMatch) { des.PresentMatch = nil if initial != nil { initial.PresentMatch = nil } } } if initial == nil { return des } cDes := &HttpRouteRulesMatchesQueryParameters{} if dcl.StringCanonicalize(des.QueryParameter, initial.QueryParameter) || dcl.IsZeroValue(des.QueryParameter) { cDes.QueryParameter = initial.QueryParameter } else { cDes.QueryParameter = des.QueryParameter } if dcl.StringCanonicalize(des.ExactMatch, initial.ExactMatch) || dcl.IsZeroValue(des.ExactMatch) { cDes.ExactMatch = initial.ExactMatch } else { cDes.ExactMatch = des.ExactMatch } if dcl.StringCanonicalize(des.RegexMatch, initial.RegexMatch) || dcl.IsZeroValue(des.RegexMatch) { cDes.RegexMatch = initial.RegexMatch } else { cDes.RegexMatch = des.RegexMatch } if dcl.BoolCanonicalize(des.PresentMatch, initial.PresentMatch) || dcl.IsZeroValue(des.PresentMatch) { cDes.PresentMatch = initial.PresentMatch } else { cDes.PresentMatch = des.PresentMatch } return cDes } func canonicalizeHttpRouteRulesMatchesQueryParametersSlice(des, initial []HttpRouteRulesMatchesQueryParameters, opts ...dcl.ApplyOption) []HttpRouteRulesMatchesQueryParameters { if des == nil { return initial } if len(des) != len(initial) { items := make([]HttpRouteRulesMatchesQueryParameters, 0, len(des)) for _, d := range des { cd := canonicalizeHttpRouteRulesMatchesQueryParameters(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]HttpRouteRulesMatchesQueryParameters, 0, len(des)) for i, d := range des { cd := canonicalizeHttpRouteRulesMatchesQueryParameters(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewHttpRouteRulesMatchesQueryParameters(c *Client, des, nw *HttpRouteRulesMatchesQueryParameters) *HttpRouteRulesMatchesQueryParameters { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for HttpRouteRulesMatchesQueryParameters while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringCanonicalize(des.QueryParameter, nw.QueryParameter) { nw.QueryParameter = des.QueryParameter } if dcl.StringCanonicalize(des.ExactMatch, nw.ExactMatch) { nw.ExactMatch = des.ExactMatch } if dcl.StringCanonicalize(des.RegexMatch, nw.RegexMatch) { nw.RegexMatch = des.RegexMatch } if dcl.BoolCanonicalize(des.PresentMatch, nw.PresentMatch) { nw.PresentMatch = des.PresentMatch } return nw } func canonicalizeNewHttpRouteRulesMatchesQueryParametersSet(c *Client, des, nw []HttpRouteRulesMatchesQueryParameters) []HttpRouteRulesMatchesQueryParameters { if des == nil { return nw } // Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw. var items []HttpRouteRulesMatchesQueryParameters for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareHttpRouteRulesMatchesQueryParametersNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewHttpRouteRulesMatchesQueryParameters(c, &d, &nw[matchedIndex])) nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...) } } // Also include elements in nw that are not matched in des. items = append(items, nw...) return items } func canonicalizeNewHttpRouteRulesMatchesQueryParametersSlice(c *Client, des, nw []HttpRouteRulesMatchesQueryParameters) []HttpRouteRulesMatchesQueryParameters { if des == nil { return nw } // Lengths are unequal. A diff will occur later, so we shouldn't canonicalize. // Return the original array. if len(des) != len(nw) { return nw } var items []HttpRouteRulesMatchesQueryParameters for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewHttpRouteRulesMatchesQueryParameters(c, &d, &n)) } return items } func canonicalizeHttpRouteRulesAction(des, initial *HttpRouteRulesAction, opts ...dcl.ApplyOption) *HttpRouteRulesAction { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &HttpRouteRulesAction{} cDes.Destinations = canonicalizeHttpRouteRulesActionDestinationsSlice(des.Destinations, initial.Destinations, opts...) cDes.Redirect = canonicalizeHttpRouteRulesActionRedirect(des.Redirect, initial.Redirect, opts...) cDes.FaultInjectionPolicy = canonicalizeHttpRouteRulesActionFaultInjectionPolicy(des.FaultInjectionPolicy, initial.FaultInjectionPolicy, opts...) cDes.RequestHeaderModifier = canonicalizeHttpRouteRulesActionRequestHeaderModifier(des.RequestHeaderModifier, initial.RequestHeaderModifier, opts...) cDes.ResponseHeaderModifier = canonicalizeHttpRouteRulesActionResponseHeaderModifier(des.ResponseHeaderModifier, initial.ResponseHeaderModifier, opts...) cDes.UrlRewrite = canonicalizeHttpRouteRulesActionUrlRewrite(des.UrlRewrite, initial.UrlRewrite, opts...) if dcl.StringCanonicalize(des.Timeout, initial.Timeout) || dcl.IsZeroValue(des.Timeout) { cDes.Timeout = initial.Timeout } else { cDes.Timeout = des.Timeout } cDes.RetryPolicy = canonicalizeHttpRouteRulesActionRetryPolicy(des.RetryPolicy, initial.RetryPolicy, opts...) cDes.RequestMirrorPolicy = canonicalizeHttpRouteRulesActionRequestMirrorPolicy(des.RequestMirrorPolicy, initial.RequestMirrorPolicy, opts...) cDes.CorsPolicy = canonicalizeHttpRouteRulesActionCorsPolicy(des.CorsPolicy, initial.CorsPolicy, opts...) return cDes } func canonicalizeHttpRouteRulesActionSlice(des, initial []HttpRouteRulesAction, opts ...dcl.ApplyOption) []HttpRouteRulesAction { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]HttpRouteRulesAction, 0, len(des)) for _, d := range des { cd := canonicalizeHttpRouteRulesAction(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]HttpRouteRulesAction, 0, len(des)) for i, d := range des { cd := canonicalizeHttpRouteRulesAction(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewHttpRouteRulesAction(c *Client, des, nw *HttpRouteRulesAction) *HttpRouteRulesAction { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for HttpRouteRulesAction while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } nw.Destinations = canonicalizeNewHttpRouteRulesActionDestinationsSlice(c, des.Destinations, nw.Destinations) nw.Redirect = canonicalizeNewHttpRouteRulesActionRedirect(c, des.Redirect, nw.Redirect) nw.FaultInjectionPolicy = canonicalizeNewHttpRouteRulesActionFaultInjectionPolicy(c, des.FaultInjectionPolicy, nw.FaultInjectionPolicy) nw.RequestHeaderModifier = canonicalizeNewHttpRouteRulesActionRequestHeaderModifier(c, des.RequestHeaderModifier, nw.RequestHeaderModifier) nw.ResponseHeaderModifier = canonicalizeNewHttpRouteRulesActionResponseHeaderModifier(c, des.ResponseHeaderModifier, nw.ResponseHeaderModifier) nw.UrlRewrite = canonicalizeNewHttpRouteRulesActionUrlRewrite(c, des.UrlRewrite, nw.UrlRewrite) if dcl.StringCanonicalize(des.Timeout, nw.Timeout) { nw.Timeout = des.Timeout } nw.RetryPolicy = canonicalizeNewHttpRouteRulesActionRetryPolicy(c, des.RetryPolicy, nw.RetryPolicy) nw.RequestMirrorPolicy = canonicalizeNewHttpRouteRulesActionRequestMirrorPolicy(c, des.RequestMirrorPolicy, nw.RequestMirrorPolicy) nw.CorsPolicy = canonicalizeNewHttpRouteRulesActionCorsPolicy(c, des.CorsPolicy, nw.CorsPolicy) return nw } func canonicalizeNewHttpRouteRulesActionSet(c *Client, des, nw []HttpRouteRulesAction) []HttpRouteRulesAction { if des == nil { return nw } // Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw. var items []HttpRouteRulesAction for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareHttpRouteRulesActionNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewHttpRouteRulesAction(c, &d, &nw[matchedIndex])) nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...) } } // Also include elements in nw that are not matched in des. items = append(items, nw...) return items } func canonicalizeNewHttpRouteRulesActionSlice(c *Client, des, nw []HttpRouteRulesAction) []HttpRouteRulesAction { if des == nil { return nw } // Lengths are unequal. A diff will occur later, so we shouldn't canonicalize. // Return the original array. if len(des) != len(nw) { return nw } var items []HttpRouteRulesAction for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewHttpRouteRulesAction(c, &d, &n)) } return items } func canonicalizeHttpRouteRulesActionDestinations(des, initial *HttpRouteRulesActionDestinations, opts ...dcl.ApplyOption) *HttpRouteRulesActionDestinations { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &HttpRouteRulesActionDestinations{} if dcl.IsZeroValue(des.Weight) || (dcl.IsEmptyValueIndirect(des.Weight) && dcl.IsEmptyValueIndirect(initial.Weight)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Weight = initial.Weight } else { cDes.Weight = des.Weight } if dcl.IsZeroValue(des.ServiceName) || (dcl.IsEmptyValueIndirect(des.ServiceName) && dcl.IsEmptyValueIndirect(initial.ServiceName)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.ServiceName = initial.ServiceName } else { cDes.ServiceName = des.ServiceName } return cDes } func canonicalizeHttpRouteRulesActionDestinationsSlice(des, initial []HttpRouteRulesActionDestinations, opts ...dcl.ApplyOption) []HttpRouteRulesActionDestinations { if des == nil { return initial } if len(des) != len(initial) { items := make([]HttpRouteRulesActionDestinations, 0, len(des)) for _, d := range des { cd := canonicalizeHttpRouteRulesActionDestinations(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]HttpRouteRulesActionDestinations, 0, len(des)) for i, d := range des { cd := canonicalizeHttpRouteRulesActionDestinations(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewHttpRouteRulesActionDestinations(c *Client, des, nw *HttpRouteRulesActionDestinations) *HttpRouteRulesActionDestinations { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for HttpRouteRulesActionDestinations while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } return nw } func canonicalizeNewHttpRouteRulesActionDestinationsSet(c *Client, des, nw []HttpRouteRulesActionDestinations) []HttpRouteRulesActionDestinations { if des == nil { return nw } // Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw. var items []HttpRouteRulesActionDestinations for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareHttpRouteRulesActionDestinationsNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewHttpRouteRulesActionDestinations(c, &d, &nw[matchedIndex])) nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...) } } // Also include elements in nw that are not matched in des. items = append(items, nw...) return items } func canonicalizeNewHttpRouteRulesActionDestinationsSlice(c *Client, des, nw []HttpRouteRulesActionDestinations) []HttpRouteRulesActionDestinations { if des == nil { return nw } // Lengths are unequal. A diff will occur later, so we shouldn't canonicalize. // Return the original array. if len(des) != len(nw) { return nw } var items []HttpRouteRulesActionDestinations for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewHttpRouteRulesActionDestinations(c, &d, &n)) } return items } func canonicalizeHttpRouteRulesActionRedirect(des, initial *HttpRouteRulesActionRedirect, opts ...dcl.ApplyOption) *HttpRouteRulesActionRedirect { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &HttpRouteRulesActionRedirect{} if dcl.StringCanonicalize(des.HostRedirect, initial.HostRedirect) || dcl.IsZeroValue(des.HostRedirect) { cDes.HostRedirect = initial.HostRedirect } else { cDes.HostRedirect = des.HostRedirect } if dcl.StringCanonicalize(des.PathRedirect, initial.PathRedirect) || dcl.IsZeroValue(des.PathRedirect) { cDes.PathRedirect = initial.PathRedirect } else { cDes.PathRedirect = des.PathRedirect } if dcl.StringCanonicalize(des.PrefixRewrite, initial.PrefixRewrite) || dcl.IsZeroValue(des.PrefixRewrite) { cDes.PrefixRewrite = initial.PrefixRewrite } else { cDes.PrefixRewrite = des.PrefixRewrite } if dcl.IsZeroValue(des.ResponseCode) || (dcl.IsEmptyValueIndirect(des.ResponseCode) && dcl.IsEmptyValueIndirect(initial.ResponseCode)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.ResponseCode = initial.ResponseCode } else { cDes.ResponseCode = des.ResponseCode } if dcl.BoolCanonicalize(des.HttpsRedirect, initial.HttpsRedirect) || dcl.IsZeroValue(des.HttpsRedirect) { cDes.HttpsRedirect = initial.HttpsRedirect } else { cDes.HttpsRedirect = des.HttpsRedirect } if dcl.BoolCanonicalize(des.StripQuery, initial.StripQuery) || dcl.IsZeroValue(des.StripQuery) { cDes.StripQuery = initial.StripQuery } else { cDes.StripQuery = des.StripQuery } if dcl.IsZeroValue(des.PortRedirect) || (dcl.IsEmptyValueIndirect(des.PortRedirect) && dcl.IsEmptyValueIndirect(initial.PortRedirect)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.PortRedirect = initial.PortRedirect } else { cDes.PortRedirect = des.PortRedirect } return cDes } func canonicalizeHttpRouteRulesActionRedirectSlice(des, initial []HttpRouteRulesActionRedirect, opts ...dcl.ApplyOption) []HttpRouteRulesActionRedirect { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]HttpRouteRulesActionRedirect, 0, len(des)) for _, d := range des { cd := canonicalizeHttpRouteRulesActionRedirect(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]HttpRouteRulesActionRedirect, 0, len(des)) for i, d := range des { cd := canonicalizeHttpRouteRulesActionRedirect(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewHttpRouteRulesActionRedirect(c *Client, des, nw *HttpRouteRulesActionRedirect) *HttpRouteRulesActionRedirect { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for HttpRouteRulesActionRedirect while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringCanonicalize(des.HostRedirect, nw.HostRedirect) { nw.HostRedirect = des.HostRedirect } if dcl.StringCanonicalize(des.PathRedirect, nw.PathRedirect) { nw.PathRedirect = des.PathRedirect } if dcl.StringCanonicalize(des.PrefixRewrite, nw.PrefixRewrite) { nw.PrefixRewrite = des.PrefixRewrite } if dcl.BoolCanonicalize(des.HttpsRedirect, nw.HttpsRedirect) { nw.HttpsRedirect = des.HttpsRedirect } if dcl.BoolCanonicalize(des.StripQuery, nw.StripQuery) { nw.StripQuery = des.StripQuery } return nw } func canonicalizeNewHttpRouteRulesActionRedirectSet(c *Client, des, nw []HttpRouteRulesActionRedirect) []HttpRouteRulesActionRedirect { if des == nil { return nw } // Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw. var items []HttpRouteRulesActionRedirect for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareHttpRouteRulesActionRedirectNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewHttpRouteRulesActionRedirect(c, &d, &nw[matchedIndex])) nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...) } } // Also include elements in nw that are not matched in des. items = append(items, nw...) return items } func canonicalizeNewHttpRouteRulesActionRedirectSlice(c *Client, des, nw []HttpRouteRulesActionRedirect) []HttpRouteRulesActionRedirect { if des == nil { return nw } // Lengths are unequal. A diff will occur later, so we shouldn't canonicalize. // Return the original array. if len(des) != len(nw) { return nw } var items []HttpRouteRulesActionRedirect for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewHttpRouteRulesActionRedirect(c, &d, &n)) } return items } func canonicalizeHttpRouteRulesActionFaultInjectionPolicy(des, initial *HttpRouteRulesActionFaultInjectionPolicy, opts ...dcl.ApplyOption) *HttpRouteRulesActionFaultInjectionPolicy { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &HttpRouteRulesActionFaultInjectionPolicy{} cDes.Delay = canonicalizeHttpRouteRulesActionFaultInjectionPolicyDelay(des.Delay, initial.Delay, opts...) cDes.Abort = canonicalizeHttpRouteRulesActionFaultInjectionPolicyAbort(des.Abort, initial.Abort, opts...) return cDes } func canonicalizeHttpRouteRulesActionFaultInjectionPolicySlice(des, initial []HttpRouteRulesActionFaultInjectionPolicy, opts ...dcl.ApplyOption) []HttpRouteRulesActionFaultInjectionPolicy { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]HttpRouteRulesActionFaultInjectionPolicy, 0, len(des)) for _, d := range des { cd := canonicalizeHttpRouteRulesActionFaultInjectionPolicy(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]HttpRouteRulesActionFaultInjectionPolicy, 0, len(des)) for i, d := range des { cd := canonicalizeHttpRouteRulesActionFaultInjectionPolicy(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewHttpRouteRulesActionFaultInjectionPolicy(c *Client, des, nw *HttpRouteRulesActionFaultInjectionPolicy) *HttpRouteRulesActionFaultInjectionPolicy { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for HttpRouteRulesActionFaultInjectionPolicy while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } nw.Delay = canonicalizeNewHttpRouteRulesActionFaultInjectionPolicyDelay(c, des.Delay, nw.Delay) nw.Abort = canonicalizeNewHttpRouteRulesActionFaultInjectionPolicyAbort(c, des.Abort, nw.Abort) return nw } func canonicalizeNewHttpRouteRulesActionFaultInjectionPolicySet(c *Client, des, nw []HttpRouteRulesActionFaultInjectionPolicy) []HttpRouteRulesActionFaultInjectionPolicy { if des == nil { return nw } // Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw. var items []HttpRouteRulesActionFaultInjectionPolicy for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareHttpRouteRulesActionFaultInjectionPolicyNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewHttpRouteRulesActionFaultInjectionPolicy(c, &d, &nw[matchedIndex])) nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...) } } // Also include elements in nw that are not matched in des. items = append(items, nw...) return items } func canonicalizeNewHttpRouteRulesActionFaultInjectionPolicySlice(c *Client, des, nw []HttpRouteRulesActionFaultInjectionPolicy) []HttpRouteRulesActionFaultInjectionPolicy { if des == nil { return nw } // Lengths are unequal. A diff will occur later, so we shouldn't canonicalize. // Return the original array. if len(des) != len(nw) { return nw } var items []HttpRouteRulesActionFaultInjectionPolicy for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewHttpRouteRulesActionFaultInjectionPolicy(c, &d, &n)) } return items } func canonicalizeHttpRouteRulesActionFaultInjectionPolicyDelay(des, initial *HttpRouteRulesActionFaultInjectionPolicyDelay, opts ...dcl.ApplyOption) *HttpRouteRulesActionFaultInjectionPolicyDelay { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &HttpRouteRulesActionFaultInjectionPolicyDelay{} if dcl.StringCanonicalize(des.FixedDelay, initial.FixedDelay) || dcl.IsZeroValue(des.FixedDelay) { cDes.FixedDelay = initial.FixedDelay } else { cDes.FixedDelay = des.FixedDelay } if dcl.IsZeroValue(des.Percentage) || (dcl.IsEmptyValueIndirect(des.Percentage) && dcl.IsEmptyValueIndirect(initial.Percentage)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Percentage = initial.Percentage } else { cDes.Percentage = des.Percentage } return cDes } func canonicalizeHttpRouteRulesActionFaultInjectionPolicyDelaySlice(des, initial []HttpRouteRulesActionFaultInjectionPolicyDelay, opts ...dcl.ApplyOption) []HttpRouteRulesActionFaultInjectionPolicyDelay { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]HttpRouteRulesActionFaultInjectionPolicyDelay, 0, len(des)) for _, d := range des { cd := canonicalizeHttpRouteRulesActionFaultInjectionPolicyDelay(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]HttpRouteRulesActionFaultInjectionPolicyDelay, 0, len(des)) for i, d := range des { cd := canonicalizeHttpRouteRulesActionFaultInjectionPolicyDelay(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewHttpRouteRulesActionFaultInjectionPolicyDelay(c *Client, des, nw *HttpRouteRulesActionFaultInjectionPolicyDelay) *HttpRouteRulesActionFaultInjectionPolicyDelay { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for HttpRouteRulesActionFaultInjectionPolicyDelay while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringCanonicalize(des.FixedDelay, nw.FixedDelay) { nw.FixedDelay = des.FixedDelay } return nw } func canonicalizeNewHttpRouteRulesActionFaultInjectionPolicyDelaySet(c *Client, des, nw []HttpRouteRulesActionFaultInjectionPolicyDelay) []HttpRouteRulesActionFaultInjectionPolicyDelay { if des == nil { return nw } // Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw. var items []HttpRouteRulesActionFaultInjectionPolicyDelay for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareHttpRouteRulesActionFaultInjectionPolicyDelayNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewHttpRouteRulesActionFaultInjectionPolicyDelay(c, &d, &nw[matchedIndex])) nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...) } } // Also include elements in nw that are not matched in des. items = append(items, nw...) return items } func canonicalizeNewHttpRouteRulesActionFaultInjectionPolicyDelaySlice(c *Client, des, nw []HttpRouteRulesActionFaultInjectionPolicyDelay) []HttpRouteRulesActionFaultInjectionPolicyDelay { if des == nil { return nw } // Lengths are unequal. A diff will occur later, so we shouldn't canonicalize. // Return the original array. if len(des) != len(nw) { return nw } var items []HttpRouteRulesActionFaultInjectionPolicyDelay for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewHttpRouteRulesActionFaultInjectionPolicyDelay(c, &d, &n)) } return items } func canonicalizeHttpRouteRulesActionFaultInjectionPolicyAbort(des, initial *HttpRouteRulesActionFaultInjectionPolicyAbort, opts ...dcl.ApplyOption) *HttpRouteRulesActionFaultInjectionPolicyAbort { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &HttpRouteRulesActionFaultInjectionPolicyAbort{} if dcl.IsZeroValue(des.HttpStatus) || (dcl.IsEmptyValueIndirect(des.HttpStatus) && dcl.IsEmptyValueIndirect(initial.HttpStatus)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.HttpStatus = initial.HttpStatus } else { cDes.HttpStatus = des.HttpStatus } if dcl.IsZeroValue(des.Percentage) || (dcl.IsEmptyValueIndirect(des.Percentage) && dcl.IsEmptyValueIndirect(initial.Percentage)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Percentage = initial.Percentage } else { cDes.Percentage = des.Percentage } return cDes } func canonicalizeHttpRouteRulesActionFaultInjectionPolicyAbortSlice(des, initial []HttpRouteRulesActionFaultInjectionPolicyAbort, opts ...dcl.ApplyOption) []HttpRouteRulesActionFaultInjectionPolicyAbort { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]HttpRouteRulesActionFaultInjectionPolicyAbort, 0, len(des)) for _, d := range des { cd := canonicalizeHttpRouteRulesActionFaultInjectionPolicyAbort(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]HttpRouteRulesActionFaultInjectionPolicyAbort, 0, len(des)) for i, d := range des { cd := canonicalizeHttpRouteRulesActionFaultInjectionPolicyAbort(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewHttpRouteRulesActionFaultInjectionPolicyAbort(c *Client, des, nw *HttpRouteRulesActionFaultInjectionPolicyAbort) *HttpRouteRulesActionFaultInjectionPolicyAbort { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for HttpRouteRulesActionFaultInjectionPolicyAbort while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } return nw } func canonicalizeNewHttpRouteRulesActionFaultInjectionPolicyAbortSet(c *Client, des, nw []HttpRouteRulesActionFaultInjectionPolicyAbort) []HttpRouteRulesActionFaultInjectionPolicyAbort { if des == nil { return nw } // Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw. var items []HttpRouteRulesActionFaultInjectionPolicyAbort for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareHttpRouteRulesActionFaultInjectionPolicyAbortNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewHttpRouteRulesActionFaultInjectionPolicyAbort(c, &d, &nw[matchedIndex])) nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...) } } // Also include elements in nw that are not matched in des. items = append(items, nw...) return items } func canonicalizeNewHttpRouteRulesActionFaultInjectionPolicyAbortSlice(c *Client, des, nw []HttpRouteRulesActionFaultInjectionPolicyAbort) []HttpRouteRulesActionFaultInjectionPolicyAbort { if des == nil { return nw } // Lengths are unequal. A diff will occur later, so we shouldn't canonicalize. // Return the original array. if len(des) != len(nw) { return nw } var items []HttpRouteRulesActionFaultInjectionPolicyAbort for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewHttpRouteRulesActionFaultInjectionPolicyAbort(c, &d, &n)) } return items } func canonicalizeHttpRouteRulesActionRequestHeaderModifier(des, initial *HttpRouteRulesActionRequestHeaderModifier, opts ...dcl.ApplyOption) *HttpRouteRulesActionRequestHeaderModifier { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &HttpRouteRulesActionRequestHeaderModifier{} if dcl.IsZeroValue(des.Set) || (dcl.IsEmptyValueIndirect(des.Set) && dcl.IsEmptyValueIndirect(initial.Set)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Set = initial.Set } else { cDes.Set = des.Set } if dcl.IsZeroValue(des.Add) || (dcl.IsEmptyValueIndirect(des.Add) && dcl.IsEmptyValueIndirect(initial.Add)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Add = initial.Add } else { cDes.Add = des.Add } if dcl.StringArrayCanonicalize(des.Remove, initial.Remove) { cDes.Remove = initial.Remove } else { cDes.Remove = des.Remove } return cDes } func canonicalizeHttpRouteRulesActionRequestHeaderModifierSlice(des, initial []HttpRouteRulesActionRequestHeaderModifier, opts ...dcl.ApplyOption) []HttpRouteRulesActionRequestHeaderModifier { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]HttpRouteRulesActionRequestHeaderModifier, 0, len(des)) for _, d := range des { cd := canonicalizeHttpRouteRulesActionRequestHeaderModifier(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]HttpRouteRulesActionRequestHeaderModifier, 0, len(des)) for i, d := range des { cd := canonicalizeHttpRouteRulesActionRequestHeaderModifier(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewHttpRouteRulesActionRequestHeaderModifier(c *Client, des, nw *HttpRouteRulesActionRequestHeaderModifier) *HttpRouteRulesActionRequestHeaderModifier { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for HttpRouteRulesActionRequestHeaderModifier while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringArrayCanonicalize(des.Remove, nw.Remove) { nw.Remove = des.Remove } return nw } func canonicalizeNewHttpRouteRulesActionRequestHeaderModifierSet(c *Client, des, nw []HttpRouteRulesActionRequestHeaderModifier) []HttpRouteRulesActionRequestHeaderModifier { if des == nil { return nw } // Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw. var items []HttpRouteRulesActionRequestHeaderModifier for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareHttpRouteRulesActionRequestHeaderModifierNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewHttpRouteRulesActionRequestHeaderModifier(c, &d, &nw[matchedIndex])) nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...) } } // Also include elements in nw that are not matched in des. items = append(items, nw...) return items } func canonicalizeNewHttpRouteRulesActionRequestHeaderModifierSlice(c *Client, des, nw []HttpRouteRulesActionRequestHeaderModifier) []HttpRouteRulesActionRequestHeaderModifier { if des == nil { return nw } // Lengths are unequal. A diff will occur later, so we shouldn't canonicalize. // Return the original array. if len(des) != len(nw) { return nw } var items []HttpRouteRulesActionRequestHeaderModifier for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewHttpRouteRulesActionRequestHeaderModifier(c, &d, &n)) } return items } func canonicalizeHttpRouteRulesActionResponseHeaderModifier(des, initial *HttpRouteRulesActionResponseHeaderModifier, opts ...dcl.ApplyOption) *HttpRouteRulesActionResponseHeaderModifier { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &HttpRouteRulesActionResponseHeaderModifier{} if dcl.IsZeroValue(des.Set) || (dcl.IsEmptyValueIndirect(des.Set) && dcl.IsEmptyValueIndirect(initial.Set)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Set = initial.Set } else { cDes.Set = des.Set } if dcl.IsZeroValue(des.Add) || (dcl.IsEmptyValueIndirect(des.Add) && dcl.IsEmptyValueIndirect(initial.Add)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Add = initial.Add } else { cDes.Add = des.Add } if dcl.StringArrayCanonicalize(des.Remove, initial.Remove) { cDes.Remove = initial.Remove } else { cDes.Remove = des.Remove } return cDes } func canonicalizeHttpRouteRulesActionResponseHeaderModifierSlice(des, initial []HttpRouteRulesActionResponseHeaderModifier, opts ...dcl.ApplyOption) []HttpRouteRulesActionResponseHeaderModifier { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]HttpRouteRulesActionResponseHeaderModifier, 0, len(des)) for _, d := range des { cd := canonicalizeHttpRouteRulesActionResponseHeaderModifier(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]HttpRouteRulesActionResponseHeaderModifier, 0, len(des)) for i, d := range des { cd := canonicalizeHttpRouteRulesActionResponseHeaderModifier(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewHttpRouteRulesActionResponseHeaderModifier(c *Client, des, nw *HttpRouteRulesActionResponseHeaderModifier) *HttpRouteRulesActionResponseHeaderModifier { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for HttpRouteRulesActionResponseHeaderModifier while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringArrayCanonicalize(des.Remove, nw.Remove) { nw.Remove = des.Remove } return nw } func canonicalizeNewHttpRouteRulesActionResponseHeaderModifierSet(c *Client, des, nw []HttpRouteRulesActionResponseHeaderModifier) []HttpRouteRulesActionResponseHeaderModifier { if des == nil { return nw } // Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw. var items []HttpRouteRulesActionResponseHeaderModifier for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareHttpRouteRulesActionResponseHeaderModifierNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewHttpRouteRulesActionResponseHeaderModifier(c, &d, &nw[matchedIndex])) nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...) } } // Also include elements in nw that are not matched in des. items = append(items, nw...) return items } func canonicalizeNewHttpRouteRulesActionResponseHeaderModifierSlice(c *Client, des, nw []HttpRouteRulesActionResponseHeaderModifier) []HttpRouteRulesActionResponseHeaderModifier { if des == nil { return nw } // Lengths are unequal. A diff will occur later, so we shouldn't canonicalize. // Return the original array. if len(des) != len(nw) { return nw } var items []HttpRouteRulesActionResponseHeaderModifier for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewHttpRouteRulesActionResponseHeaderModifier(c, &d, &n)) } return items } func canonicalizeHttpRouteRulesActionUrlRewrite(des, initial *HttpRouteRulesActionUrlRewrite, opts ...dcl.ApplyOption) *HttpRouteRulesActionUrlRewrite { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &HttpRouteRulesActionUrlRewrite{} if dcl.StringCanonicalize(des.PathPrefixRewrite, initial.PathPrefixRewrite) || dcl.IsZeroValue(des.PathPrefixRewrite) { cDes.PathPrefixRewrite = initial.PathPrefixRewrite } else { cDes.PathPrefixRewrite = des.PathPrefixRewrite } if dcl.StringCanonicalize(des.HostRewrite, initial.HostRewrite) || dcl.IsZeroValue(des.HostRewrite) { cDes.HostRewrite = initial.HostRewrite } else { cDes.HostRewrite = des.HostRewrite } return cDes } func canonicalizeHttpRouteRulesActionUrlRewriteSlice(des, initial []HttpRouteRulesActionUrlRewrite, opts ...dcl.ApplyOption) []HttpRouteRulesActionUrlRewrite { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]HttpRouteRulesActionUrlRewrite, 0, len(des)) for _, d := range des { cd := canonicalizeHttpRouteRulesActionUrlRewrite(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]HttpRouteRulesActionUrlRewrite, 0, len(des)) for i, d := range des { cd := canonicalizeHttpRouteRulesActionUrlRewrite(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewHttpRouteRulesActionUrlRewrite(c *Client, des, nw *HttpRouteRulesActionUrlRewrite) *HttpRouteRulesActionUrlRewrite { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for HttpRouteRulesActionUrlRewrite while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringCanonicalize(des.PathPrefixRewrite, nw.PathPrefixRewrite) { nw.PathPrefixRewrite = des.PathPrefixRewrite } if dcl.StringCanonicalize(des.HostRewrite, nw.HostRewrite) { nw.HostRewrite = des.HostRewrite } return nw } func canonicalizeNewHttpRouteRulesActionUrlRewriteSet(c *Client, des, nw []HttpRouteRulesActionUrlRewrite) []HttpRouteRulesActionUrlRewrite { if des == nil { return nw } // Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw. var items []HttpRouteRulesActionUrlRewrite for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareHttpRouteRulesActionUrlRewriteNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewHttpRouteRulesActionUrlRewrite(c, &d, &nw[matchedIndex])) nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...) } } // Also include elements in nw that are not matched in des. items = append(items, nw...) return items } func canonicalizeNewHttpRouteRulesActionUrlRewriteSlice(c *Client, des, nw []HttpRouteRulesActionUrlRewrite) []HttpRouteRulesActionUrlRewrite { if des == nil { return nw } // Lengths are unequal. A diff will occur later, so we shouldn't canonicalize. // Return the original array. if len(des) != len(nw) { return nw } var items []HttpRouteRulesActionUrlRewrite for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewHttpRouteRulesActionUrlRewrite(c, &d, &n)) } return items } func canonicalizeHttpRouteRulesActionRetryPolicy(des, initial *HttpRouteRulesActionRetryPolicy, opts ...dcl.ApplyOption) *HttpRouteRulesActionRetryPolicy { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &HttpRouteRulesActionRetryPolicy{} if dcl.StringArrayCanonicalize(des.RetryConditions, initial.RetryConditions) { cDes.RetryConditions = initial.RetryConditions } else { cDes.RetryConditions = des.RetryConditions } if dcl.IsZeroValue(des.NumRetries) || (dcl.IsEmptyValueIndirect(des.NumRetries) && dcl.IsEmptyValueIndirect(initial.NumRetries)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.NumRetries = initial.NumRetries } else { cDes.NumRetries = des.NumRetries } if dcl.StringCanonicalize(des.PerTryTimeout, initial.PerTryTimeout) || dcl.IsZeroValue(des.PerTryTimeout) { cDes.PerTryTimeout = initial.PerTryTimeout } else { cDes.PerTryTimeout = des.PerTryTimeout } return cDes } func canonicalizeHttpRouteRulesActionRetryPolicySlice(des, initial []HttpRouteRulesActionRetryPolicy, opts ...dcl.ApplyOption) []HttpRouteRulesActionRetryPolicy { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]HttpRouteRulesActionRetryPolicy, 0, len(des)) for _, d := range des { cd := canonicalizeHttpRouteRulesActionRetryPolicy(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]HttpRouteRulesActionRetryPolicy, 0, len(des)) for i, d := range des { cd := canonicalizeHttpRouteRulesActionRetryPolicy(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewHttpRouteRulesActionRetryPolicy(c *Client, des, nw *HttpRouteRulesActionRetryPolicy) *HttpRouteRulesActionRetryPolicy { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for HttpRouteRulesActionRetryPolicy while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringArrayCanonicalize(des.RetryConditions, nw.RetryConditions) { nw.RetryConditions = des.RetryConditions } if dcl.StringCanonicalize(des.PerTryTimeout, nw.PerTryTimeout) { nw.PerTryTimeout = des.PerTryTimeout } return nw } func canonicalizeNewHttpRouteRulesActionRetryPolicySet(c *Client, des, nw []HttpRouteRulesActionRetryPolicy) []HttpRouteRulesActionRetryPolicy { if des == nil { return nw } // Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw. var items []HttpRouteRulesActionRetryPolicy for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareHttpRouteRulesActionRetryPolicyNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewHttpRouteRulesActionRetryPolicy(c, &d, &nw[matchedIndex])) nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...) } } // Also include elements in nw that are not matched in des. items = append(items, nw...) return items } func canonicalizeNewHttpRouteRulesActionRetryPolicySlice(c *Client, des, nw []HttpRouteRulesActionRetryPolicy) []HttpRouteRulesActionRetryPolicy { if des == nil { return nw } // Lengths are unequal. A diff will occur later, so we shouldn't canonicalize. // Return the original array. if len(des) != len(nw) { return nw } var items []HttpRouteRulesActionRetryPolicy for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewHttpRouteRulesActionRetryPolicy(c, &d, &n)) } return items } func canonicalizeHttpRouteRulesActionRequestMirrorPolicy(des, initial *HttpRouteRulesActionRequestMirrorPolicy, opts ...dcl.ApplyOption) *HttpRouteRulesActionRequestMirrorPolicy { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &HttpRouteRulesActionRequestMirrorPolicy{} cDes.Destination = canonicalizeHttpRouteRulesActionRequestMirrorPolicyDestination(des.Destination, initial.Destination, opts...) return cDes } func canonicalizeHttpRouteRulesActionRequestMirrorPolicySlice(des, initial []HttpRouteRulesActionRequestMirrorPolicy, opts ...dcl.ApplyOption) []HttpRouteRulesActionRequestMirrorPolicy { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]HttpRouteRulesActionRequestMirrorPolicy, 0, len(des)) for _, d := range des { cd := canonicalizeHttpRouteRulesActionRequestMirrorPolicy(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]HttpRouteRulesActionRequestMirrorPolicy, 0, len(des)) for i, d := range des { cd := canonicalizeHttpRouteRulesActionRequestMirrorPolicy(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewHttpRouteRulesActionRequestMirrorPolicy(c *Client, des, nw *HttpRouteRulesActionRequestMirrorPolicy) *HttpRouteRulesActionRequestMirrorPolicy { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for HttpRouteRulesActionRequestMirrorPolicy while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } nw.Destination = canonicalizeNewHttpRouteRulesActionRequestMirrorPolicyDestination(c, des.Destination, nw.Destination) return nw } func canonicalizeNewHttpRouteRulesActionRequestMirrorPolicySet(c *Client, des, nw []HttpRouteRulesActionRequestMirrorPolicy) []HttpRouteRulesActionRequestMirrorPolicy { if des == nil { return nw } // Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw. var items []HttpRouteRulesActionRequestMirrorPolicy for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareHttpRouteRulesActionRequestMirrorPolicyNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewHttpRouteRulesActionRequestMirrorPolicy(c, &d, &nw[matchedIndex])) nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...) } } // Also include elements in nw that are not matched in des. items = append(items, nw...) return items } func canonicalizeNewHttpRouteRulesActionRequestMirrorPolicySlice(c *Client, des, nw []HttpRouteRulesActionRequestMirrorPolicy) []HttpRouteRulesActionRequestMirrorPolicy { if des == nil { return nw } // Lengths are unequal. A diff will occur later, so we shouldn't canonicalize. // Return the original array. if len(des) != len(nw) { return nw } var items []HttpRouteRulesActionRequestMirrorPolicy for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewHttpRouteRulesActionRequestMirrorPolicy(c, &d, &n)) } return items } func canonicalizeHttpRouteRulesActionRequestMirrorPolicyDestination(des, initial *HttpRouteRulesActionRequestMirrorPolicyDestination, opts ...dcl.ApplyOption) *HttpRouteRulesActionRequestMirrorPolicyDestination { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &HttpRouteRulesActionRequestMirrorPolicyDestination{} if dcl.IsZeroValue(des.Weight) || (dcl.IsEmptyValueIndirect(des.Weight) && dcl.IsEmptyValueIndirect(initial.Weight)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Weight = initial.Weight } else { cDes.Weight = des.Weight } if dcl.IsZeroValue(des.ServiceName) || (dcl.IsEmptyValueIndirect(des.ServiceName) && dcl.IsEmptyValueIndirect(initial.ServiceName)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.ServiceName = initial.ServiceName } else { cDes.ServiceName = des.ServiceName } return cDes } func canonicalizeHttpRouteRulesActionRequestMirrorPolicyDestinationSlice(des, initial []HttpRouteRulesActionRequestMirrorPolicyDestination, opts ...dcl.ApplyOption) []HttpRouteRulesActionRequestMirrorPolicyDestination { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]HttpRouteRulesActionRequestMirrorPolicyDestination, 0, len(des)) for _, d := range des { cd := canonicalizeHttpRouteRulesActionRequestMirrorPolicyDestination(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]HttpRouteRulesActionRequestMirrorPolicyDestination, 0, len(des)) for i, d := range des { cd := canonicalizeHttpRouteRulesActionRequestMirrorPolicyDestination(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewHttpRouteRulesActionRequestMirrorPolicyDestination(c *Client, des, nw *HttpRouteRulesActionRequestMirrorPolicyDestination) *HttpRouteRulesActionRequestMirrorPolicyDestination { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for HttpRouteRulesActionRequestMirrorPolicyDestination while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } return nw } func canonicalizeNewHttpRouteRulesActionRequestMirrorPolicyDestinationSet(c *Client, des, nw []HttpRouteRulesActionRequestMirrorPolicyDestination) []HttpRouteRulesActionRequestMirrorPolicyDestination { if des == nil { return nw } // Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw. var items []HttpRouteRulesActionRequestMirrorPolicyDestination for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareHttpRouteRulesActionRequestMirrorPolicyDestinationNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewHttpRouteRulesActionRequestMirrorPolicyDestination(c, &d, &nw[matchedIndex])) nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...) } } // Also include elements in nw that are not matched in des. items = append(items, nw...) return items } func canonicalizeNewHttpRouteRulesActionRequestMirrorPolicyDestinationSlice(c *Client, des, nw []HttpRouteRulesActionRequestMirrorPolicyDestination) []HttpRouteRulesActionRequestMirrorPolicyDestination { if des == nil { return nw } // Lengths are unequal. A diff will occur later, so we shouldn't canonicalize. // Return the original array. if len(des) != len(nw) { return nw } var items []HttpRouteRulesActionRequestMirrorPolicyDestination for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewHttpRouteRulesActionRequestMirrorPolicyDestination(c, &d, &n)) } return items } func canonicalizeHttpRouteRulesActionCorsPolicy(des, initial *HttpRouteRulesActionCorsPolicy, opts ...dcl.ApplyOption) *HttpRouteRulesActionCorsPolicy { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &HttpRouteRulesActionCorsPolicy{} if dcl.StringArrayCanonicalize(des.AllowOrigins, initial.AllowOrigins) { cDes.AllowOrigins = initial.AllowOrigins } else { cDes.AllowOrigins = des.AllowOrigins } if dcl.StringArrayCanonicalize(des.AllowOriginRegexes, initial.AllowOriginRegexes) { cDes.AllowOriginRegexes = initial.AllowOriginRegexes } else { cDes.AllowOriginRegexes = des.AllowOriginRegexes } if dcl.StringArrayCanonicalize(des.AllowMethods, initial.AllowMethods) { cDes.AllowMethods = initial.AllowMethods } else { cDes.AllowMethods = des.AllowMethods } if dcl.StringArrayCanonicalize(des.AllowHeaders, initial.AllowHeaders) { cDes.AllowHeaders = initial.AllowHeaders } else { cDes.AllowHeaders = des.AllowHeaders } if dcl.StringArrayCanonicalize(des.ExposeHeaders, initial.ExposeHeaders) { cDes.ExposeHeaders = initial.ExposeHeaders } else { cDes.ExposeHeaders = des.ExposeHeaders } if dcl.StringCanonicalize(des.MaxAge, initial.MaxAge) || dcl.IsZeroValue(des.MaxAge) { cDes.MaxAge = initial.MaxAge } else { cDes.MaxAge = des.MaxAge } if dcl.BoolCanonicalize(des.AllowCredentials, initial.AllowCredentials) || dcl.IsZeroValue(des.AllowCredentials) { cDes.AllowCredentials = initial.AllowCredentials } else { cDes.AllowCredentials = des.AllowCredentials } if dcl.BoolCanonicalize(des.Disabled, initial.Disabled) || dcl.IsZeroValue(des.Disabled) { cDes.Disabled = initial.Disabled } else { cDes.Disabled = des.Disabled } return cDes } func canonicalizeHttpRouteRulesActionCorsPolicySlice(des, initial []HttpRouteRulesActionCorsPolicy, opts ...dcl.ApplyOption) []HttpRouteRulesActionCorsPolicy { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]HttpRouteRulesActionCorsPolicy, 0, len(des)) for _, d := range des { cd := canonicalizeHttpRouteRulesActionCorsPolicy(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]HttpRouteRulesActionCorsPolicy, 0, len(des)) for i, d := range des { cd := canonicalizeHttpRouteRulesActionCorsPolicy(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewHttpRouteRulesActionCorsPolicy(c *Client, des, nw *HttpRouteRulesActionCorsPolicy) *HttpRouteRulesActionCorsPolicy { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for HttpRouteRulesActionCorsPolicy while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringArrayCanonicalize(des.AllowOrigins, nw.AllowOrigins) { nw.AllowOrigins = des.AllowOrigins } if dcl.StringArrayCanonicalize(des.AllowOriginRegexes, nw.AllowOriginRegexes) { nw.AllowOriginRegexes = des.AllowOriginRegexes } if dcl.StringArrayCanonicalize(des.AllowMethods, nw.AllowMethods) { nw.AllowMethods = des.AllowMethods } if dcl.StringArrayCanonicalize(des.AllowHeaders, nw.AllowHeaders) { nw.AllowHeaders = des.AllowHeaders } if dcl.StringArrayCanonicalize(des.ExposeHeaders, nw.ExposeHeaders) { nw.ExposeHeaders = des.ExposeHeaders } if dcl.StringCanonicalize(des.MaxAge, nw.MaxAge) { nw.MaxAge = des.MaxAge } if dcl.BoolCanonicalize(des.AllowCredentials, nw.AllowCredentials) { nw.AllowCredentials = des.AllowCredentials } if dcl.BoolCanonicalize(des.Disabled, nw.Disabled) { nw.Disabled = des.Disabled } return nw } func canonicalizeNewHttpRouteRulesActionCorsPolicySet(c *Client, des, nw []HttpRouteRulesActionCorsPolicy) []HttpRouteRulesActionCorsPolicy { if des == nil { return nw } // Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw. var items []HttpRouteRulesActionCorsPolicy for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareHttpRouteRulesActionCorsPolicyNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewHttpRouteRulesActionCorsPolicy(c, &d, &nw[matchedIndex])) nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...) } } // Also include elements in nw that are not matched in des. items = append(items, nw...) return items } func canonicalizeNewHttpRouteRulesActionCorsPolicySlice(c *Client, des, nw []HttpRouteRulesActionCorsPolicy) []HttpRouteRulesActionCorsPolicy { if des == nil { return nw } // Lengths are unequal. A diff will occur later, so we shouldn't canonicalize. // Return the original array. if len(des) != len(nw) { return nw } var items []HttpRouteRulesActionCorsPolicy for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewHttpRouteRulesActionCorsPolicy(c, &d, &n)) } return items } // The differ returns a list of diffs, along with a list of operations that should be taken // to remedy them. Right now, it does not attempt to consolidate operations - if several // fields can be fixed with a patch update, it will perform the patch several times. // Diffs on some fields will be ignored if the `desired` state has an empty (nil) // value. This empty value indicates that the user does not care about the state for // the field. Empty fields on the actual object will cause diffs. // TODO(magic-modules-eng): for efficiency in some resources, add batching. func diffHttpRoute(c *Client, desired, actual *HttpRoute, opts ...dcl.ApplyOption) ([]*dcl.FieldDiff, error) { if desired == nil || actual == nil { return nil, fmt.Errorf("nil resource passed to diff - always a programming error: %#v, %#v", desired, actual) } c.Config.Logger.Infof("Diff function called with desired state: %v", desired) c.Config.Logger.Infof("Diff function called with actual state: %v", actual) var fn dcl.FieldName var newDiffs []*dcl.FieldDiff // New style diffs. if ds, err := dcl.Diff(desired.Name, actual.Name, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Name")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.Description, actual.Description, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Description")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.CreateTime, actual.CreateTime, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("CreateTime")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.UpdateTime, actual.UpdateTime, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("UpdateTime")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.Hostnames, actual.Hostnames, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Hostnames")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.Meshes, actual.Meshes, dcl.DiffInfo{Type: "ReferenceType", OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Meshes")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.Gateways, actual.Gateways, dcl.DiffInfo{Type: "ReferenceType", OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Gateways")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.Labels, actual.Labels, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Labels")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.Rules, actual.Rules, dcl.DiffInfo{ObjectFunction: compareHttpRouteRulesNewStyle, EmptyObject: EmptyHttpRouteRules, OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Rules")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.Project, actual.Project, dcl.DiffInfo{Type: "ReferenceType", OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Project")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.Location, actual.Location, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Location")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.SelfLink, actual.SelfLink, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("SelfLink")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if len(newDiffs) > 0 { c.Config.Logger.Infof("Diff function found diffs: %v", newDiffs) } return newDiffs, nil } func compareHttpRouteRulesNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*HttpRouteRules) if !ok { desiredNotPointer, ok := d.(HttpRouteRules) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRules or *HttpRouteRules", d) } desired = &desiredNotPointer } actual, ok := a.(*HttpRouteRules) if !ok { actualNotPointer, ok := a.(HttpRouteRules) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRules", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Matches, actual.Matches, dcl.DiffInfo{ObjectFunction: compareHttpRouteRulesMatchesNewStyle, EmptyObject: EmptyHttpRouteRulesMatches, OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Matches")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Action, actual.Action, dcl.DiffInfo{ObjectFunction: compareHttpRouteRulesActionNewStyle, EmptyObject: EmptyHttpRouteRulesAction, OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Action")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareHttpRouteRulesMatchesNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*HttpRouteRulesMatches) if !ok { desiredNotPointer, ok := d.(HttpRouteRulesMatches) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesMatches or *HttpRouteRulesMatches", d) } desired = &desiredNotPointer } actual, ok := a.(*HttpRouteRulesMatches) if !ok { actualNotPointer, ok := a.(HttpRouteRulesMatches) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesMatches", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.FullPathMatch, actual.FullPathMatch, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("FullPathMatch")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.PrefixMatch, actual.PrefixMatch, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("PrefixMatch")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.RegexMatch, actual.RegexMatch, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("RegexMatch")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.IgnoreCase, actual.IgnoreCase, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("IgnoreCase")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Headers, actual.Headers, dcl.DiffInfo{ObjectFunction: compareHttpRouteRulesMatchesHeadersNewStyle, EmptyObject: EmptyHttpRouteRulesMatchesHeaders, OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Headers")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.QueryParameters, actual.QueryParameters, dcl.DiffInfo{ObjectFunction: compareHttpRouteRulesMatchesQueryParametersNewStyle, EmptyObject: EmptyHttpRouteRulesMatchesQueryParameters, OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("QueryParameters")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareHttpRouteRulesMatchesHeadersNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*HttpRouteRulesMatchesHeaders) if !ok { desiredNotPointer, ok := d.(HttpRouteRulesMatchesHeaders) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesMatchesHeaders or *HttpRouteRulesMatchesHeaders", d) } desired = &desiredNotPointer } actual, ok := a.(*HttpRouteRulesMatchesHeaders) if !ok { actualNotPointer, ok := a.(HttpRouteRulesMatchesHeaders) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesMatchesHeaders", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Header, actual.Header, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Header")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.ExactMatch, actual.ExactMatch, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("ExactMatch")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.RegexMatch, actual.RegexMatch, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("RegexMatch")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.PrefixMatch, actual.PrefixMatch, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("PrefixMatch")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.PresentMatch, actual.PresentMatch, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("PresentMatch")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.SuffixMatch, actual.SuffixMatch, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("SuffixMatch")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.RangeMatch, actual.RangeMatch, dcl.DiffInfo{ObjectFunction: compareHttpRouteRulesMatchesHeadersRangeMatchNewStyle, EmptyObject: EmptyHttpRouteRulesMatchesHeadersRangeMatch, OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("RangeMatch")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.InvertMatch, actual.InvertMatch, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("InvertMatch")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareHttpRouteRulesMatchesHeadersRangeMatchNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*HttpRouteRulesMatchesHeadersRangeMatch) if !ok { desiredNotPointer, ok := d.(HttpRouteRulesMatchesHeadersRangeMatch) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesMatchesHeadersRangeMatch or *HttpRouteRulesMatchesHeadersRangeMatch", d) } desired = &desiredNotPointer } actual, ok := a.(*HttpRouteRulesMatchesHeadersRangeMatch) if !ok { actualNotPointer, ok := a.(HttpRouteRulesMatchesHeadersRangeMatch) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesMatchesHeadersRangeMatch", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Start, actual.Start, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Start")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.End, actual.End, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("End")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareHttpRouteRulesMatchesQueryParametersNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*HttpRouteRulesMatchesQueryParameters) if !ok { desiredNotPointer, ok := d.(HttpRouteRulesMatchesQueryParameters) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesMatchesQueryParameters or *HttpRouteRulesMatchesQueryParameters", d) } desired = &desiredNotPointer } actual, ok := a.(*HttpRouteRulesMatchesQueryParameters) if !ok { actualNotPointer, ok := a.(HttpRouteRulesMatchesQueryParameters) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesMatchesQueryParameters", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.QueryParameter, actual.QueryParameter, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("QueryParameter")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.ExactMatch, actual.ExactMatch, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("ExactMatch")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.RegexMatch, actual.RegexMatch, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("RegexMatch")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.PresentMatch, actual.PresentMatch, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("PresentMatch")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareHttpRouteRulesActionNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*HttpRouteRulesAction) if !ok { desiredNotPointer, ok := d.(HttpRouteRulesAction) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesAction or *HttpRouteRulesAction", d) } desired = &desiredNotPointer } actual, ok := a.(*HttpRouteRulesAction) if !ok { actualNotPointer, ok := a.(HttpRouteRulesAction) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesAction", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Destinations, actual.Destinations, dcl.DiffInfo{ObjectFunction: compareHttpRouteRulesActionDestinationsNewStyle, EmptyObject: EmptyHttpRouteRulesActionDestinations, OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Destinations")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Redirect, actual.Redirect, dcl.DiffInfo{ObjectFunction: compareHttpRouteRulesActionRedirectNewStyle, EmptyObject: EmptyHttpRouteRulesActionRedirect, OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Redirect")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.FaultInjectionPolicy, actual.FaultInjectionPolicy, dcl.DiffInfo{ObjectFunction: compareHttpRouteRulesActionFaultInjectionPolicyNewStyle, EmptyObject: EmptyHttpRouteRulesActionFaultInjectionPolicy, OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("FaultInjectionPolicy")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.RequestHeaderModifier, actual.RequestHeaderModifier, dcl.DiffInfo{ObjectFunction: compareHttpRouteRulesActionRequestHeaderModifierNewStyle, EmptyObject: EmptyHttpRouteRulesActionRequestHeaderModifier, OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("RequestHeaderModifier")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.ResponseHeaderModifier, actual.ResponseHeaderModifier, dcl.DiffInfo{ObjectFunction: compareHttpRouteRulesActionResponseHeaderModifierNewStyle, EmptyObject: EmptyHttpRouteRulesActionResponseHeaderModifier, OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("ResponseHeaderModifier")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.UrlRewrite, actual.UrlRewrite, dcl.DiffInfo{ObjectFunction: compareHttpRouteRulesActionUrlRewriteNewStyle, EmptyObject: EmptyHttpRouteRulesActionUrlRewrite, OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("UrlRewrite")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Timeout, actual.Timeout, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Timeout")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.RetryPolicy, actual.RetryPolicy, dcl.DiffInfo{ObjectFunction: compareHttpRouteRulesActionRetryPolicyNewStyle, EmptyObject: EmptyHttpRouteRulesActionRetryPolicy, OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("RetryPolicy")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.RequestMirrorPolicy, actual.RequestMirrorPolicy, dcl.DiffInfo{ObjectFunction: compareHttpRouteRulesActionRequestMirrorPolicyNewStyle, EmptyObject: EmptyHttpRouteRulesActionRequestMirrorPolicy, OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("RequestMirrorPolicy")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.CorsPolicy, actual.CorsPolicy, dcl.DiffInfo{ObjectFunction: compareHttpRouteRulesActionCorsPolicyNewStyle, EmptyObject: EmptyHttpRouteRulesActionCorsPolicy, OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("CorsPolicy")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareHttpRouteRulesActionDestinationsNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*HttpRouteRulesActionDestinations) if !ok { desiredNotPointer, ok := d.(HttpRouteRulesActionDestinations) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionDestinations or *HttpRouteRulesActionDestinations", d) } desired = &desiredNotPointer } actual, ok := a.(*HttpRouteRulesActionDestinations) if !ok { actualNotPointer, ok := a.(HttpRouteRulesActionDestinations) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionDestinations", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Weight, actual.Weight, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Weight")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.ServiceName, actual.ServiceName, dcl.DiffInfo{Type: "ReferenceType", OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("ServiceName")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareHttpRouteRulesActionRedirectNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*HttpRouteRulesActionRedirect) if !ok { desiredNotPointer, ok := d.(HttpRouteRulesActionRedirect) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionRedirect or *HttpRouteRulesActionRedirect", d) } desired = &desiredNotPointer } actual, ok := a.(*HttpRouteRulesActionRedirect) if !ok { actualNotPointer, ok := a.(HttpRouteRulesActionRedirect) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionRedirect", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.HostRedirect, actual.HostRedirect, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("HostRedirect")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.PathRedirect, actual.PathRedirect, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("PathRedirect")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.PrefixRewrite, actual.PrefixRewrite, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("PrefixRewrite")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.ResponseCode, actual.ResponseCode, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("ResponseCode")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.HttpsRedirect, actual.HttpsRedirect, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("HttpsRedirect")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.StripQuery, actual.StripQuery, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("StripQuery")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.PortRedirect, actual.PortRedirect, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("PortRedirect")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareHttpRouteRulesActionFaultInjectionPolicyNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*HttpRouteRulesActionFaultInjectionPolicy) if !ok { desiredNotPointer, ok := d.(HttpRouteRulesActionFaultInjectionPolicy) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionFaultInjectionPolicy or *HttpRouteRulesActionFaultInjectionPolicy", d) } desired = &desiredNotPointer } actual, ok := a.(*HttpRouteRulesActionFaultInjectionPolicy) if !ok { actualNotPointer, ok := a.(HttpRouteRulesActionFaultInjectionPolicy) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionFaultInjectionPolicy", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Delay, actual.Delay, dcl.DiffInfo{ObjectFunction: compareHttpRouteRulesActionFaultInjectionPolicyDelayNewStyle, EmptyObject: EmptyHttpRouteRulesActionFaultInjectionPolicyDelay, OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Delay")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Abort, actual.Abort, dcl.DiffInfo{ObjectFunction: compareHttpRouteRulesActionFaultInjectionPolicyAbortNewStyle, EmptyObject: EmptyHttpRouteRulesActionFaultInjectionPolicyAbort, OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Abort")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareHttpRouteRulesActionFaultInjectionPolicyDelayNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*HttpRouteRulesActionFaultInjectionPolicyDelay) if !ok { desiredNotPointer, ok := d.(HttpRouteRulesActionFaultInjectionPolicyDelay) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionFaultInjectionPolicyDelay or *HttpRouteRulesActionFaultInjectionPolicyDelay", d) } desired = &desiredNotPointer } actual, ok := a.(*HttpRouteRulesActionFaultInjectionPolicyDelay) if !ok { actualNotPointer, ok := a.(HttpRouteRulesActionFaultInjectionPolicyDelay) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionFaultInjectionPolicyDelay", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.FixedDelay, actual.FixedDelay, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("FixedDelay")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Percentage, actual.Percentage, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Percentage")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareHttpRouteRulesActionFaultInjectionPolicyAbortNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*HttpRouteRulesActionFaultInjectionPolicyAbort) if !ok { desiredNotPointer, ok := d.(HttpRouteRulesActionFaultInjectionPolicyAbort) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionFaultInjectionPolicyAbort or *HttpRouteRulesActionFaultInjectionPolicyAbort", d) } desired = &desiredNotPointer } actual, ok := a.(*HttpRouteRulesActionFaultInjectionPolicyAbort) if !ok { actualNotPointer, ok := a.(HttpRouteRulesActionFaultInjectionPolicyAbort) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionFaultInjectionPolicyAbort", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.HttpStatus, actual.HttpStatus, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("HttpStatus")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Percentage, actual.Percentage, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Percentage")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareHttpRouteRulesActionRequestHeaderModifierNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*HttpRouteRulesActionRequestHeaderModifier) if !ok { desiredNotPointer, ok := d.(HttpRouteRulesActionRequestHeaderModifier) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionRequestHeaderModifier or *HttpRouteRulesActionRequestHeaderModifier", d) } desired = &desiredNotPointer } actual, ok := a.(*HttpRouteRulesActionRequestHeaderModifier) if !ok { actualNotPointer, ok := a.(HttpRouteRulesActionRequestHeaderModifier) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionRequestHeaderModifier", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Set, actual.Set, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Set")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Add, actual.Add, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Add")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Remove, actual.Remove, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Remove")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareHttpRouteRulesActionResponseHeaderModifierNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*HttpRouteRulesActionResponseHeaderModifier) if !ok { desiredNotPointer, ok := d.(HttpRouteRulesActionResponseHeaderModifier) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionResponseHeaderModifier or *HttpRouteRulesActionResponseHeaderModifier", d) } desired = &desiredNotPointer } actual, ok := a.(*HttpRouteRulesActionResponseHeaderModifier) if !ok { actualNotPointer, ok := a.(HttpRouteRulesActionResponseHeaderModifier) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionResponseHeaderModifier", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Set, actual.Set, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Set")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Add, actual.Add, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Add")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Remove, actual.Remove, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Remove")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareHttpRouteRulesActionUrlRewriteNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*HttpRouteRulesActionUrlRewrite) if !ok { desiredNotPointer, ok := d.(HttpRouteRulesActionUrlRewrite) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionUrlRewrite or *HttpRouteRulesActionUrlRewrite", d) } desired = &desiredNotPointer } actual, ok := a.(*HttpRouteRulesActionUrlRewrite) if !ok { actualNotPointer, ok := a.(HttpRouteRulesActionUrlRewrite) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionUrlRewrite", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.PathPrefixRewrite, actual.PathPrefixRewrite, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("PathPrefixRewrite")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.HostRewrite, actual.HostRewrite, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("HostRewrite")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareHttpRouteRulesActionRetryPolicyNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*HttpRouteRulesActionRetryPolicy) if !ok { desiredNotPointer, ok := d.(HttpRouteRulesActionRetryPolicy) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionRetryPolicy or *HttpRouteRulesActionRetryPolicy", d) } desired = &desiredNotPointer } actual, ok := a.(*HttpRouteRulesActionRetryPolicy) if !ok { actualNotPointer, ok := a.(HttpRouteRulesActionRetryPolicy) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionRetryPolicy", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.RetryConditions, actual.RetryConditions, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("RetryConditions")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.NumRetries, actual.NumRetries, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("NumRetries")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.PerTryTimeout, actual.PerTryTimeout, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("PerTryTimeout")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareHttpRouteRulesActionRequestMirrorPolicyNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*HttpRouteRulesActionRequestMirrorPolicy) if !ok { desiredNotPointer, ok := d.(HttpRouteRulesActionRequestMirrorPolicy) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionRequestMirrorPolicy or *HttpRouteRulesActionRequestMirrorPolicy", d) } desired = &desiredNotPointer } actual, ok := a.(*HttpRouteRulesActionRequestMirrorPolicy) if !ok { actualNotPointer, ok := a.(HttpRouteRulesActionRequestMirrorPolicy) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionRequestMirrorPolicy", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Destination, actual.Destination, dcl.DiffInfo{ObjectFunction: compareHttpRouteRulesActionRequestMirrorPolicyDestinationNewStyle, EmptyObject: EmptyHttpRouteRulesActionRequestMirrorPolicyDestination, OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Destination")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareHttpRouteRulesActionRequestMirrorPolicyDestinationNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*HttpRouteRulesActionRequestMirrorPolicyDestination) if !ok { desiredNotPointer, ok := d.(HttpRouteRulesActionRequestMirrorPolicyDestination) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionRequestMirrorPolicyDestination or *HttpRouteRulesActionRequestMirrorPolicyDestination", d) } desired = &desiredNotPointer } actual, ok := a.(*HttpRouteRulesActionRequestMirrorPolicyDestination) if !ok { actualNotPointer, ok := a.(HttpRouteRulesActionRequestMirrorPolicyDestination) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionRequestMirrorPolicyDestination", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Weight, actual.Weight, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Weight")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.ServiceName, actual.ServiceName, dcl.DiffInfo{Type: "ReferenceType", OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("ServiceName")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareHttpRouteRulesActionCorsPolicyNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*HttpRouteRulesActionCorsPolicy) if !ok { desiredNotPointer, ok := d.(HttpRouteRulesActionCorsPolicy) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionCorsPolicy or *HttpRouteRulesActionCorsPolicy", d) } desired = &desiredNotPointer } actual, ok := a.(*HttpRouteRulesActionCorsPolicy) if !ok { actualNotPointer, ok := a.(HttpRouteRulesActionCorsPolicy) if !ok { return nil, fmt.Errorf("obj %v is not a HttpRouteRulesActionCorsPolicy", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.AllowOrigins, actual.AllowOrigins, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("AllowOrigins")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.AllowOriginRegexes, actual.AllowOriginRegexes, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("AllowOriginRegexes")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.AllowMethods, actual.AllowMethods, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("AllowMethods")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.AllowHeaders, actual.AllowHeaders, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("AllowHeaders")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.ExposeHeaders, actual.ExposeHeaders, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("ExposeHeaders")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.MaxAge, actual.MaxAge, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("MaxAge")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.AllowCredentials, actual.AllowCredentials, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("AllowCredentials")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Disabled, actual.Disabled, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateHttpRouteUpdateHttpRouteOperation")}, fn.AddNest("Disabled")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } // urlNormalized returns a copy of the resource struct with values normalized // for URL substitutions. For instance, it converts long-form self-links to // short-form so they can be substituted in. func (r *HttpRoute) urlNormalized() *HttpRoute { normalized := dcl.Copy(*r).(HttpRoute) normalized.Name = dcl.SelfLinkToName(r.Name) normalized.Description = dcl.SelfLinkToName(r.Description) normalized.Project = dcl.SelfLinkToName(r.Project) normalized.Location = dcl.SelfLinkToName(r.Location) normalized.SelfLink = dcl.SelfLinkToName(r.SelfLink) return &normalized } func (r *HttpRoute) updateURL(userBasePath, updateName string) (string, error) { nr := r.urlNormalized() if updateName == "UpdateHttpRoute" { fields := map[string]interface{}{ "project": dcl.ValueOrEmptyString(nr.Project), "location": dcl.ValueOrEmptyString(nr.Location), "name": dcl.ValueOrEmptyString(nr.Name), } return dcl.URL("projects/{{project}}/locations/{{location}}/httpRoutes/{{name}}", nr.basePath(), userBasePath, fields), nil } return "", fmt.Errorf("unknown update name: %s", updateName) } // marshal encodes the HttpRoute resource into JSON for a Create request, and // performs transformations from the resource schema to the API schema if // necessary. func (r *HttpRoute) marshal(c *Client) ([]byte, error) { m, err := expandHttpRoute(c, r) if err != nil { return nil, fmt.Errorf("error marshalling HttpRoute: %w", err) } return json.Marshal(m) } // unmarshalHttpRoute decodes JSON responses into the HttpRoute resource schema. func unmarshalHttpRoute(b []byte, c *Client, res *HttpRoute) (*HttpRoute, error) { var m map[string]interface{} if err := json.Unmarshal(b, &m); err != nil { return nil, err } return unmarshalMapHttpRoute(m, c, res) } func unmarshalMapHttpRoute(m map[string]interface{}, c *Client, res *HttpRoute) (*HttpRoute, error) { flattened := flattenHttpRoute(c, m, res) if flattened == nil { return nil, fmt.Errorf("attempted to flatten empty json object") } return flattened, nil } // expandHttpRoute expands HttpRoute into a JSON request object. func expandHttpRoute(c *Client, f *HttpRoute) (map[string]interface{}, error) { m := make(map[string]interface{}) res := f _ = res if v, err := dcl.DeriveField("projects/%s/locations/global/httpRoutes/%s", f.Name, dcl.SelfLinkToName(f.Project), dcl.SelfLinkToName(f.Name)); err != nil { return nil, fmt.Errorf("error expanding Name into name: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["name"] = v } if v := f.Description; dcl.ValueShouldBeSent(v) { m["description"] = v } if v := f.Hostnames; v != nil { m["hostnames"] = v } if v := f.Meshes; v != nil { m["meshes"] = v } if v := f.Gateways; v != nil { m["gateways"] = v } if v := f.Labels; dcl.ValueShouldBeSent(v) { m["labels"] = v } if v, err := expandHttpRouteRulesSlice(c, f.Rules, res); err != nil { return nil, fmt.Errorf("error expanding Rules into rules: %w", err) } else if v != nil { m["rules"] = v } if v, err := dcl.EmptyValue(); err != nil { return nil, fmt.Errorf("error expanding Project into project: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["project"] = v } if v, err := dcl.EmptyValue(); err != nil { return nil, fmt.Errorf("error expanding Location into location: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["location"] = v } return m, nil } // flattenHttpRoute flattens HttpRoute from a JSON request object into the // HttpRoute type. func flattenHttpRoute(c *Client, i interface{}, res *HttpRoute) *HttpRoute { m, ok := i.(map[string]interface{}) if !ok { return nil } if len(m) == 0 { return nil } resultRes := &HttpRoute{} resultRes.Name = dcl.FlattenString(m["name"]) resultRes.Description = dcl.FlattenString(m["description"]) resultRes.CreateTime = dcl.FlattenString(m["createTime"]) resultRes.UpdateTime = dcl.FlattenString(m["updateTime"]) resultRes.Hostnames = dcl.FlattenStringSlice(m["hostnames"]) resultRes.Meshes = dcl.FlattenStringSlice(m["meshes"]) resultRes.Gateways = dcl.FlattenStringSlice(m["gateways"]) resultRes.Labels = dcl.FlattenKeyValuePairs(m["labels"]) resultRes.Rules = flattenHttpRouteRulesSlice(c, m["rules"], res) resultRes.Project = dcl.FlattenString(m["project"]) resultRes.Location = dcl.FlattenString(m["location"]) resultRes.SelfLink = dcl.FlattenString(m["selfLink"]) return resultRes } // expandHttpRouteRulesMap expands the contents of HttpRouteRules into a JSON // request object. func expandHttpRouteRulesMap(c *Client, f map[string]HttpRouteRules, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandHttpRouteRules(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandHttpRouteRulesSlice expands the contents of HttpRouteRules into a JSON // request object. func expandHttpRouteRulesSlice(c *Client, f []HttpRouteRules, res *HttpRoute) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandHttpRouteRules(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenHttpRouteRulesMap flattens the contents of HttpRouteRules from a JSON // response object. func flattenHttpRouteRulesMap(c *Client, i interface{}, res *HttpRoute) map[string]HttpRouteRules { a, ok := i.(map[string]interface{}) if !ok { return map[string]HttpRouteRules{} } if len(a) == 0 { return map[string]HttpRouteRules{} } items := make(map[string]HttpRouteRules) for k, item := range a { items[k] = *flattenHttpRouteRules(c, item.(map[string]interface{}), res) } return items } // flattenHttpRouteRulesSlice flattens the contents of HttpRouteRules from a JSON // response object. func flattenHttpRouteRulesSlice(c *Client, i interface{}, res *HttpRoute) []HttpRouteRules { a, ok := i.([]interface{}) if !ok { return []HttpRouteRules{} } if len(a) == 0 { return []HttpRouteRules{} } items := make([]HttpRouteRules, 0, len(a)) for _, item := range a { items = append(items, *flattenHttpRouteRules(c, item.(map[string]interface{}), res)) } return items } // expandHttpRouteRules expands an instance of HttpRouteRules into a JSON // request object. func expandHttpRouteRules(c *Client, f *HttpRouteRules, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } m := make(map[string]interface{}) if v, err := expandHttpRouteRulesMatchesSlice(c, f.Matches, res); err != nil { return nil, fmt.Errorf("error expanding Matches into matches: %w", err) } else if v != nil { m["matches"] = v } if v, err := expandHttpRouteRulesAction(c, f.Action, res); err != nil { return nil, fmt.Errorf("error expanding Action into action: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["action"] = v } return m, nil } // flattenHttpRouteRules flattens an instance of HttpRouteRules from a JSON // response object. func flattenHttpRouteRules(c *Client, i interface{}, res *HttpRoute) *HttpRouteRules { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &HttpRouteRules{} if dcl.IsEmptyValueIndirect(i) { return EmptyHttpRouteRules } r.Matches = flattenHttpRouteRulesMatchesSlice(c, m["matches"], res) r.Action = flattenHttpRouteRulesAction(c, m["action"], res) return r } // expandHttpRouteRulesMatchesMap expands the contents of HttpRouteRulesMatches into a JSON // request object. func expandHttpRouteRulesMatchesMap(c *Client, f map[string]HttpRouteRulesMatches, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandHttpRouteRulesMatches(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandHttpRouteRulesMatchesSlice expands the contents of HttpRouteRulesMatches into a JSON // request object. func expandHttpRouteRulesMatchesSlice(c *Client, f []HttpRouteRulesMatches, res *HttpRoute) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandHttpRouteRulesMatches(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenHttpRouteRulesMatchesMap flattens the contents of HttpRouteRulesMatches from a JSON // response object. func flattenHttpRouteRulesMatchesMap(c *Client, i interface{}, res *HttpRoute) map[string]HttpRouteRulesMatches { a, ok := i.(map[string]interface{}) if !ok { return map[string]HttpRouteRulesMatches{} } if len(a) == 0 { return map[string]HttpRouteRulesMatches{} } items := make(map[string]HttpRouteRulesMatches) for k, item := range a { items[k] = *flattenHttpRouteRulesMatches(c, item.(map[string]interface{}), res) } return items } // flattenHttpRouteRulesMatchesSlice flattens the contents of HttpRouteRulesMatches from a JSON // response object. func flattenHttpRouteRulesMatchesSlice(c *Client, i interface{}, res *HttpRoute) []HttpRouteRulesMatches { a, ok := i.([]interface{}) if !ok { return []HttpRouteRulesMatches{} } if len(a) == 0 { return []HttpRouteRulesMatches{} } items := make([]HttpRouteRulesMatches, 0, len(a)) for _, item := range a { items = append(items, *flattenHttpRouteRulesMatches(c, item.(map[string]interface{}), res)) } return items } // expandHttpRouteRulesMatches expands an instance of HttpRouteRulesMatches into a JSON // request object. func expandHttpRouteRulesMatches(c *Client, f *HttpRouteRulesMatches, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } m := make(map[string]interface{}) if v := f.FullPathMatch; !dcl.IsEmptyValueIndirect(v) { m["fullPathMatch"] = v } if v := f.PrefixMatch; !dcl.IsEmptyValueIndirect(v) { m["prefixMatch"] = v } if v := f.RegexMatch; !dcl.IsEmptyValueIndirect(v) { m["regexMatch"] = v } if v := f.IgnoreCase; !dcl.IsEmptyValueIndirect(v) { m["ignoreCase"] = v } if v, err := expandHttpRouteRulesMatchesHeadersSlice(c, f.Headers, res); err != nil { return nil, fmt.Errorf("error expanding Headers into headers: %w", err) } else if v != nil { m["headers"] = v } if v, err := expandHttpRouteRulesMatchesQueryParametersSlice(c, f.QueryParameters, res); err != nil { return nil, fmt.Errorf("error expanding QueryParameters into queryParameters: %w", err) } else if v != nil { m["queryParameters"] = v } return m, nil } // flattenHttpRouteRulesMatches flattens an instance of HttpRouteRulesMatches from a JSON // response object. func flattenHttpRouteRulesMatches(c *Client, i interface{}, res *HttpRoute) *HttpRouteRulesMatches { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &HttpRouteRulesMatches{} if dcl.IsEmptyValueIndirect(i) { return EmptyHttpRouteRulesMatches } r.FullPathMatch = dcl.FlattenString(m["fullPathMatch"]) r.PrefixMatch = dcl.FlattenString(m["prefixMatch"]) r.RegexMatch = dcl.FlattenString(m["regexMatch"]) r.IgnoreCase = dcl.FlattenBool(m["ignoreCase"]) r.Headers = flattenHttpRouteRulesMatchesHeadersSlice(c, m["headers"], res) r.QueryParameters = flattenHttpRouteRulesMatchesQueryParametersSlice(c, m["queryParameters"], res) return r } // expandHttpRouteRulesMatchesHeadersMap expands the contents of HttpRouteRulesMatchesHeaders into a JSON // request object. func expandHttpRouteRulesMatchesHeadersMap(c *Client, f map[string]HttpRouteRulesMatchesHeaders, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandHttpRouteRulesMatchesHeaders(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandHttpRouteRulesMatchesHeadersSlice expands the contents of HttpRouteRulesMatchesHeaders into a JSON // request object. func expandHttpRouteRulesMatchesHeadersSlice(c *Client, f []HttpRouteRulesMatchesHeaders, res *HttpRoute) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandHttpRouteRulesMatchesHeaders(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenHttpRouteRulesMatchesHeadersMap flattens the contents of HttpRouteRulesMatchesHeaders from a JSON // response object. func flattenHttpRouteRulesMatchesHeadersMap(c *Client, i interface{}, res *HttpRoute) map[string]HttpRouteRulesMatchesHeaders { a, ok := i.(map[string]interface{}) if !ok { return map[string]HttpRouteRulesMatchesHeaders{} } if len(a) == 0 { return map[string]HttpRouteRulesMatchesHeaders{} } items := make(map[string]HttpRouteRulesMatchesHeaders) for k, item := range a { items[k] = *flattenHttpRouteRulesMatchesHeaders(c, item.(map[string]interface{}), res) } return items } // flattenHttpRouteRulesMatchesHeadersSlice flattens the contents of HttpRouteRulesMatchesHeaders from a JSON // response object. func flattenHttpRouteRulesMatchesHeadersSlice(c *Client, i interface{}, res *HttpRoute) []HttpRouteRulesMatchesHeaders { a, ok := i.([]interface{}) if !ok { return []HttpRouteRulesMatchesHeaders{} } if len(a) == 0 { return []HttpRouteRulesMatchesHeaders{} } items := make([]HttpRouteRulesMatchesHeaders, 0, len(a)) for _, item := range a { items = append(items, *flattenHttpRouteRulesMatchesHeaders(c, item.(map[string]interface{}), res)) } return items } // expandHttpRouteRulesMatchesHeaders expands an instance of HttpRouteRulesMatchesHeaders into a JSON // request object. func expandHttpRouteRulesMatchesHeaders(c *Client, f *HttpRouteRulesMatchesHeaders, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } m := make(map[string]interface{}) if v := f.Header; !dcl.IsEmptyValueIndirect(v) { m["header"] = v } if v := f.ExactMatch; !dcl.IsEmptyValueIndirect(v) { m["exactMatch"] = v } if v := f.RegexMatch; !dcl.IsEmptyValueIndirect(v) { m["regexMatch"] = v } if v := f.PrefixMatch; !dcl.IsEmptyValueIndirect(v) { m["prefixMatch"] = v } if v := f.PresentMatch; !dcl.IsEmptyValueIndirect(v) { m["presentMatch"] = v } if v := f.SuffixMatch; !dcl.IsEmptyValueIndirect(v) { m["suffixMatch"] = v } if v, err := expandHttpRouteRulesMatchesHeadersRangeMatch(c, f.RangeMatch, res); err != nil { return nil, fmt.Errorf("error expanding RangeMatch into rangeMatch: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["rangeMatch"] = v } if v := f.InvertMatch; !dcl.IsEmptyValueIndirect(v) { m["invertMatch"] = v } return m, nil } // flattenHttpRouteRulesMatchesHeaders flattens an instance of HttpRouteRulesMatchesHeaders from a JSON // response object. func flattenHttpRouteRulesMatchesHeaders(c *Client, i interface{}, res *HttpRoute) *HttpRouteRulesMatchesHeaders { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &HttpRouteRulesMatchesHeaders{} if dcl.IsEmptyValueIndirect(i) { return EmptyHttpRouteRulesMatchesHeaders } r.Header = dcl.FlattenString(m["header"]) r.ExactMatch = dcl.FlattenString(m["exactMatch"]) r.RegexMatch = dcl.FlattenString(m["regexMatch"]) r.PrefixMatch = dcl.FlattenString(m["prefixMatch"]) r.PresentMatch = dcl.FlattenBool(m["presentMatch"]) r.SuffixMatch = dcl.FlattenString(m["suffixMatch"]) r.RangeMatch = flattenHttpRouteRulesMatchesHeadersRangeMatch(c, m["rangeMatch"], res) r.InvertMatch = dcl.FlattenBool(m["invertMatch"]) return r } // expandHttpRouteRulesMatchesHeadersRangeMatchMap expands the contents of HttpRouteRulesMatchesHeadersRangeMatch into a JSON // request object. func expandHttpRouteRulesMatchesHeadersRangeMatchMap(c *Client, f map[string]HttpRouteRulesMatchesHeadersRangeMatch, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandHttpRouteRulesMatchesHeadersRangeMatch(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandHttpRouteRulesMatchesHeadersRangeMatchSlice expands the contents of HttpRouteRulesMatchesHeadersRangeMatch into a JSON // request object. func expandHttpRouteRulesMatchesHeadersRangeMatchSlice(c *Client, f []HttpRouteRulesMatchesHeadersRangeMatch, res *HttpRoute) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandHttpRouteRulesMatchesHeadersRangeMatch(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenHttpRouteRulesMatchesHeadersRangeMatchMap flattens the contents of HttpRouteRulesMatchesHeadersRangeMatch from a JSON // response object. func flattenHttpRouteRulesMatchesHeadersRangeMatchMap(c *Client, i interface{}, res *HttpRoute) map[string]HttpRouteRulesMatchesHeadersRangeMatch { a, ok := i.(map[string]interface{}) if !ok { return map[string]HttpRouteRulesMatchesHeadersRangeMatch{} } if len(a) == 0 { return map[string]HttpRouteRulesMatchesHeadersRangeMatch{} } items := make(map[string]HttpRouteRulesMatchesHeadersRangeMatch) for k, item := range a { items[k] = *flattenHttpRouteRulesMatchesHeadersRangeMatch(c, item.(map[string]interface{}), res) } return items } // flattenHttpRouteRulesMatchesHeadersRangeMatchSlice flattens the contents of HttpRouteRulesMatchesHeadersRangeMatch from a JSON // response object. func flattenHttpRouteRulesMatchesHeadersRangeMatchSlice(c *Client, i interface{}, res *HttpRoute) []HttpRouteRulesMatchesHeadersRangeMatch { a, ok := i.([]interface{}) if !ok { return []HttpRouteRulesMatchesHeadersRangeMatch{} } if len(a) == 0 { return []HttpRouteRulesMatchesHeadersRangeMatch{} } items := make([]HttpRouteRulesMatchesHeadersRangeMatch, 0, len(a)) for _, item := range a { items = append(items, *flattenHttpRouteRulesMatchesHeadersRangeMatch(c, item.(map[string]interface{}), res)) } return items } // expandHttpRouteRulesMatchesHeadersRangeMatch expands an instance of HttpRouteRulesMatchesHeadersRangeMatch into a JSON // request object. func expandHttpRouteRulesMatchesHeadersRangeMatch(c *Client, f *HttpRouteRulesMatchesHeadersRangeMatch, res *HttpRoute) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.Start; !dcl.IsEmptyValueIndirect(v) { m["start"] = v } if v := f.End; !dcl.IsEmptyValueIndirect(v) { m["end"] = v } return m, nil } // flattenHttpRouteRulesMatchesHeadersRangeMatch flattens an instance of HttpRouteRulesMatchesHeadersRangeMatch from a JSON // response object. func flattenHttpRouteRulesMatchesHeadersRangeMatch(c *Client, i interface{}, res *HttpRoute) *HttpRouteRulesMatchesHeadersRangeMatch { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &HttpRouteRulesMatchesHeadersRangeMatch{} if dcl.IsEmptyValueIndirect(i) { return EmptyHttpRouteRulesMatchesHeadersRangeMatch } r.Start = dcl.FlattenInteger(m["start"]) r.End = dcl.FlattenInteger(m["end"]) return r } // expandHttpRouteRulesMatchesQueryParametersMap expands the contents of HttpRouteRulesMatchesQueryParameters into a JSON // request object. func expandHttpRouteRulesMatchesQueryParametersMap(c *Client, f map[string]HttpRouteRulesMatchesQueryParameters, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandHttpRouteRulesMatchesQueryParameters(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandHttpRouteRulesMatchesQueryParametersSlice expands the contents of HttpRouteRulesMatchesQueryParameters into a JSON // request object. func expandHttpRouteRulesMatchesQueryParametersSlice(c *Client, f []HttpRouteRulesMatchesQueryParameters, res *HttpRoute) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandHttpRouteRulesMatchesQueryParameters(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenHttpRouteRulesMatchesQueryParametersMap flattens the contents of HttpRouteRulesMatchesQueryParameters from a JSON // response object. func flattenHttpRouteRulesMatchesQueryParametersMap(c *Client, i interface{}, res *HttpRoute) map[string]HttpRouteRulesMatchesQueryParameters { a, ok := i.(map[string]interface{}) if !ok { return map[string]HttpRouteRulesMatchesQueryParameters{} } if len(a) == 0 { return map[string]HttpRouteRulesMatchesQueryParameters{} } items := make(map[string]HttpRouteRulesMatchesQueryParameters) for k, item := range a { items[k] = *flattenHttpRouteRulesMatchesQueryParameters(c, item.(map[string]interface{}), res) } return items } // flattenHttpRouteRulesMatchesQueryParametersSlice flattens the contents of HttpRouteRulesMatchesQueryParameters from a JSON // response object. func flattenHttpRouteRulesMatchesQueryParametersSlice(c *Client, i interface{}, res *HttpRoute) []HttpRouteRulesMatchesQueryParameters { a, ok := i.([]interface{}) if !ok { return []HttpRouteRulesMatchesQueryParameters{} } if len(a) == 0 { return []HttpRouteRulesMatchesQueryParameters{} } items := make([]HttpRouteRulesMatchesQueryParameters, 0, len(a)) for _, item := range a { items = append(items, *flattenHttpRouteRulesMatchesQueryParameters(c, item.(map[string]interface{}), res)) } return items } // expandHttpRouteRulesMatchesQueryParameters expands an instance of HttpRouteRulesMatchesQueryParameters into a JSON // request object. func expandHttpRouteRulesMatchesQueryParameters(c *Client, f *HttpRouteRulesMatchesQueryParameters, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } m := make(map[string]interface{}) if v := f.QueryParameter; !dcl.IsEmptyValueIndirect(v) { m["queryParameter"] = v } if v := f.ExactMatch; !dcl.IsEmptyValueIndirect(v) { m["exactMatch"] = v } if v := f.RegexMatch; !dcl.IsEmptyValueIndirect(v) { m["regexMatch"] = v } if v := f.PresentMatch; !dcl.IsEmptyValueIndirect(v) { m["presentMatch"] = v } return m, nil } // flattenHttpRouteRulesMatchesQueryParameters flattens an instance of HttpRouteRulesMatchesQueryParameters from a JSON // response object. func flattenHttpRouteRulesMatchesQueryParameters(c *Client, i interface{}, res *HttpRoute) *HttpRouteRulesMatchesQueryParameters { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &HttpRouteRulesMatchesQueryParameters{} if dcl.IsEmptyValueIndirect(i) { return EmptyHttpRouteRulesMatchesQueryParameters } r.QueryParameter = dcl.FlattenString(m["queryParameter"]) r.ExactMatch = dcl.FlattenString(m["exactMatch"]) r.RegexMatch = dcl.FlattenString(m["regexMatch"]) r.PresentMatch = dcl.FlattenBool(m["presentMatch"]) return r } // expandHttpRouteRulesActionMap expands the contents of HttpRouteRulesAction into a JSON // request object. func expandHttpRouteRulesActionMap(c *Client, f map[string]HttpRouteRulesAction, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandHttpRouteRulesAction(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandHttpRouteRulesActionSlice expands the contents of HttpRouteRulesAction into a JSON // request object. func expandHttpRouteRulesActionSlice(c *Client, f []HttpRouteRulesAction, res *HttpRoute) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandHttpRouteRulesAction(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenHttpRouteRulesActionMap flattens the contents of HttpRouteRulesAction from a JSON // response object. func flattenHttpRouteRulesActionMap(c *Client, i interface{}, res *HttpRoute) map[string]HttpRouteRulesAction { a, ok := i.(map[string]interface{}) if !ok { return map[string]HttpRouteRulesAction{} } if len(a) == 0 { return map[string]HttpRouteRulesAction{} } items := make(map[string]HttpRouteRulesAction) for k, item := range a { items[k] = *flattenHttpRouteRulesAction(c, item.(map[string]interface{}), res) } return items } // flattenHttpRouteRulesActionSlice flattens the contents of HttpRouteRulesAction from a JSON // response object. func flattenHttpRouteRulesActionSlice(c *Client, i interface{}, res *HttpRoute) []HttpRouteRulesAction { a, ok := i.([]interface{}) if !ok { return []HttpRouteRulesAction{} } if len(a) == 0 { return []HttpRouteRulesAction{} } items := make([]HttpRouteRulesAction, 0, len(a)) for _, item := range a { items = append(items, *flattenHttpRouteRulesAction(c, item.(map[string]interface{}), res)) } return items } // expandHttpRouteRulesAction expands an instance of HttpRouteRulesAction into a JSON // request object. func expandHttpRouteRulesAction(c *Client, f *HttpRouteRulesAction, res *HttpRoute) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v, err := expandHttpRouteRulesActionDestinationsSlice(c, f.Destinations, res); err != nil { return nil, fmt.Errorf("error expanding Destinations into destinations: %w", err) } else if v != nil { m["destinations"] = v } if v, err := expandHttpRouteRulesActionRedirect(c, f.Redirect, res); err != nil { return nil, fmt.Errorf("error expanding Redirect into redirect: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["redirect"] = v } if v, err := expandHttpRouteRulesActionFaultInjectionPolicy(c, f.FaultInjectionPolicy, res); err != nil { return nil, fmt.Errorf("error expanding FaultInjectionPolicy into faultInjectionPolicy: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["faultInjectionPolicy"] = v } if v, err := expandHttpRouteRulesActionRequestHeaderModifier(c, f.RequestHeaderModifier, res); err != nil { return nil, fmt.Errorf("error expanding RequestHeaderModifier into requestHeaderModifier: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["requestHeaderModifier"] = v } if v, err := expandHttpRouteRulesActionResponseHeaderModifier(c, f.ResponseHeaderModifier, res); err != nil { return nil, fmt.Errorf("error expanding ResponseHeaderModifier into responseHeaderModifier: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["responseHeaderModifier"] = v } if v, err := expandHttpRouteRulesActionUrlRewrite(c, f.UrlRewrite, res); err != nil { return nil, fmt.Errorf("error expanding UrlRewrite into urlRewrite: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["urlRewrite"] = v } if v := f.Timeout; !dcl.IsEmptyValueIndirect(v) { m["timeout"] = v } if v, err := expandHttpRouteRulesActionRetryPolicy(c, f.RetryPolicy, res); err != nil { return nil, fmt.Errorf("error expanding RetryPolicy into retryPolicy: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["retryPolicy"] = v } if v, err := expandHttpRouteRulesActionRequestMirrorPolicy(c, f.RequestMirrorPolicy, res); err != nil { return nil, fmt.Errorf("error expanding RequestMirrorPolicy into requestMirrorPolicy: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["requestMirrorPolicy"] = v } if v, err := expandHttpRouteRulesActionCorsPolicy(c, f.CorsPolicy, res); err != nil { return nil, fmt.Errorf("error expanding CorsPolicy into corsPolicy: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["corsPolicy"] = v } return m, nil } // flattenHttpRouteRulesAction flattens an instance of HttpRouteRulesAction from a JSON // response object. func flattenHttpRouteRulesAction(c *Client, i interface{}, res *HttpRoute) *HttpRouteRulesAction { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &HttpRouteRulesAction{} if dcl.IsEmptyValueIndirect(i) { return EmptyHttpRouteRulesAction } r.Destinations = flattenHttpRouteRulesActionDestinationsSlice(c, m["destinations"], res) r.Redirect = flattenHttpRouteRulesActionRedirect(c, m["redirect"], res) r.FaultInjectionPolicy = flattenHttpRouteRulesActionFaultInjectionPolicy(c, m["faultInjectionPolicy"], res) r.RequestHeaderModifier = flattenHttpRouteRulesActionRequestHeaderModifier(c, m["requestHeaderModifier"], res) r.ResponseHeaderModifier = flattenHttpRouteRulesActionResponseHeaderModifier(c, m["responseHeaderModifier"], res) r.UrlRewrite = flattenHttpRouteRulesActionUrlRewrite(c, m["urlRewrite"], res) r.Timeout = dcl.FlattenString(m["timeout"]) r.RetryPolicy = flattenHttpRouteRulesActionRetryPolicy(c, m["retryPolicy"], res) r.RequestMirrorPolicy = flattenHttpRouteRulesActionRequestMirrorPolicy(c, m["requestMirrorPolicy"], res) r.CorsPolicy = flattenHttpRouteRulesActionCorsPolicy(c, m["corsPolicy"], res) return r } // expandHttpRouteRulesActionDestinationsMap expands the contents of HttpRouteRulesActionDestinations into a JSON // request object. func expandHttpRouteRulesActionDestinationsMap(c *Client, f map[string]HttpRouteRulesActionDestinations, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandHttpRouteRulesActionDestinations(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandHttpRouteRulesActionDestinationsSlice expands the contents of HttpRouteRulesActionDestinations into a JSON // request object. func expandHttpRouteRulesActionDestinationsSlice(c *Client, f []HttpRouteRulesActionDestinations, res *HttpRoute) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandHttpRouteRulesActionDestinations(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenHttpRouteRulesActionDestinationsMap flattens the contents of HttpRouteRulesActionDestinations from a JSON // response object. func flattenHttpRouteRulesActionDestinationsMap(c *Client, i interface{}, res *HttpRoute) map[string]HttpRouteRulesActionDestinations { a, ok := i.(map[string]interface{}) if !ok { return map[string]HttpRouteRulesActionDestinations{} } if len(a) == 0 { return map[string]HttpRouteRulesActionDestinations{} } items := make(map[string]HttpRouteRulesActionDestinations) for k, item := range a { items[k] = *flattenHttpRouteRulesActionDestinations(c, item.(map[string]interface{}), res) } return items } // flattenHttpRouteRulesActionDestinationsSlice flattens the contents of HttpRouteRulesActionDestinations from a JSON // response object. func flattenHttpRouteRulesActionDestinationsSlice(c *Client, i interface{}, res *HttpRoute) []HttpRouteRulesActionDestinations { a, ok := i.([]interface{}) if !ok { return []HttpRouteRulesActionDestinations{} } if len(a) == 0 { return []HttpRouteRulesActionDestinations{} } items := make([]HttpRouteRulesActionDestinations, 0, len(a)) for _, item := range a { items = append(items, *flattenHttpRouteRulesActionDestinations(c, item.(map[string]interface{}), res)) } return items } // expandHttpRouteRulesActionDestinations expands an instance of HttpRouteRulesActionDestinations into a JSON // request object. func expandHttpRouteRulesActionDestinations(c *Client, f *HttpRouteRulesActionDestinations, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } m := make(map[string]interface{}) if v := f.Weight; !dcl.IsEmptyValueIndirect(v) { m["weight"] = v } if v := f.ServiceName; !dcl.IsEmptyValueIndirect(v) { m["serviceName"] = v } return m, nil } // flattenHttpRouteRulesActionDestinations flattens an instance of HttpRouteRulesActionDestinations from a JSON // response object. func flattenHttpRouteRulesActionDestinations(c *Client, i interface{}, res *HttpRoute) *HttpRouteRulesActionDestinations { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &HttpRouteRulesActionDestinations{} if dcl.IsEmptyValueIndirect(i) { return EmptyHttpRouteRulesActionDestinations } r.Weight = dcl.FlattenInteger(m["weight"]) r.ServiceName = dcl.FlattenString(m["serviceName"]) return r } // expandHttpRouteRulesActionRedirectMap expands the contents of HttpRouteRulesActionRedirect into a JSON // request object. func expandHttpRouteRulesActionRedirectMap(c *Client, f map[string]HttpRouteRulesActionRedirect, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandHttpRouteRulesActionRedirect(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandHttpRouteRulesActionRedirectSlice expands the contents of HttpRouteRulesActionRedirect into a JSON // request object. func expandHttpRouteRulesActionRedirectSlice(c *Client, f []HttpRouteRulesActionRedirect, res *HttpRoute) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandHttpRouteRulesActionRedirect(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenHttpRouteRulesActionRedirectMap flattens the contents of HttpRouteRulesActionRedirect from a JSON // response object. func flattenHttpRouteRulesActionRedirectMap(c *Client, i interface{}, res *HttpRoute) map[string]HttpRouteRulesActionRedirect { a, ok := i.(map[string]interface{}) if !ok { return map[string]HttpRouteRulesActionRedirect{} } if len(a) == 0 { return map[string]HttpRouteRulesActionRedirect{} } items := make(map[string]HttpRouteRulesActionRedirect) for k, item := range a { items[k] = *flattenHttpRouteRulesActionRedirect(c, item.(map[string]interface{}), res) } return items } // flattenHttpRouteRulesActionRedirectSlice flattens the contents of HttpRouteRulesActionRedirect from a JSON // response object. func flattenHttpRouteRulesActionRedirectSlice(c *Client, i interface{}, res *HttpRoute) []HttpRouteRulesActionRedirect { a, ok := i.([]interface{}) if !ok { return []HttpRouteRulesActionRedirect{} } if len(a) == 0 { return []HttpRouteRulesActionRedirect{} } items := make([]HttpRouteRulesActionRedirect, 0, len(a)) for _, item := range a { items = append(items, *flattenHttpRouteRulesActionRedirect(c, item.(map[string]interface{}), res)) } return items } // expandHttpRouteRulesActionRedirect expands an instance of HttpRouteRulesActionRedirect into a JSON // request object. func expandHttpRouteRulesActionRedirect(c *Client, f *HttpRouteRulesActionRedirect, res *HttpRoute) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.HostRedirect; !dcl.IsEmptyValueIndirect(v) { m["hostRedirect"] = v } if v := f.PathRedirect; !dcl.IsEmptyValueIndirect(v) { m["pathRedirect"] = v } if v := f.PrefixRewrite; !dcl.IsEmptyValueIndirect(v) { m["prefixRewrite"] = v } if v := f.ResponseCode; !dcl.IsEmptyValueIndirect(v) { m["responseCode"] = v } if v := f.HttpsRedirect; !dcl.IsEmptyValueIndirect(v) { m["httpsRedirect"] = v } if v := f.StripQuery; !dcl.IsEmptyValueIndirect(v) { m["stripQuery"] = v } if v := f.PortRedirect; !dcl.IsEmptyValueIndirect(v) { m["portRedirect"] = v } return m, nil } // flattenHttpRouteRulesActionRedirect flattens an instance of HttpRouteRulesActionRedirect from a JSON // response object. func flattenHttpRouteRulesActionRedirect(c *Client, i interface{}, res *HttpRoute) *HttpRouteRulesActionRedirect { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &HttpRouteRulesActionRedirect{} if dcl.IsEmptyValueIndirect(i) { return EmptyHttpRouteRulesActionRedirect } r.HostRedirect = dcl.FlattenString(m["hostRedirect"]) r.PathRedirect = dcl.FlattenString(m["pathRedirect"]) r.PrefixRewrite = dcl.FlattenString(m["prefixRewrite"]) r.ResponseCode = flattenHttpRouteRulesActionRedirectResponseCodeEnum(m["responseCode"]) r.HttpsRedirect = dcl.FlattenBool(m["httpsRedirect"]) r.StripQuery = dcl.FlattenBool(m["stripQuery"]) r.PortRedirect = dcl.FlattenInteger(m["portRedirect"]) return r } // expandHttpRouteRulesActionFaultInjectionPolicyMap expands the contents of HttpRouteRulesActionFaultInjectionPolicy into a JSON // request object. func expandHttpRouteRulesActionFaultInjectionPolicyMap(c *Client, f map[string]HttpRouteRulesActionFaultInjectionPolicy, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandHttpRouteRulesActionFaultInjectionPolicy(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandHttpRouteRulesActionFaultInjectionPolicySlice expands the contents of HttpRouteRulesActionFaultInjectionPolicy into a JSON // request object. func expandHttpRouteRulesActionFaultInjectionPolicySlice(c *Client, f []HttpRouteRulesActionFaultInjectionPolicy, res *HttpRoute) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandHttpRouteRulesActionFaultInjectionPolicy(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenHttpRouteRulesActionFaultInjectionPolicyMap flattens the contents of HttpRouteRulesActionFaultInjectionPolicy from a JSON // response object. func flattenHttpRouteRulesActionFaultInjectionPolicyMap(c *Client, i interface{}, res *HttpRoute) map[string]HttpRouteRulesActionFaultInjectionPolicy { a, ok := i.(map[string]interface{}) if !ok { return map[string]HttpRouteRulesActionFaultInjectionPolicy{} } if len(a) == 0 { return map[string]HttpRouteRulesActionFaultInjectionPolicy{} } items := make(map[string]HttpRouteRulesActionFaultInjectionPolicy) for k, item := range a { items[k] = *flattenHttpRouteRulesActionFaultInjectionPolicy(c, item.(map[string]interface{}), res) } return items } // flattenHttpRouteRulesActionFaultInjectionPolicySlice flattens the contents of HttpRouteRulesActionFaultInjectionPolicy from a JSON // response object. func flattenHttpRouteRulesActionFaultInjectionPolicySlice(c *Client, i interface{}, res *HttpRoute) []HttpRouteRulesActionFaultInjectionPolicy { a, ok := i.([]interface{}) if !ok { return []HttpRouteRulesActionFaultInjectionPolicy{} } if len(a) == 0 { return []HttpRouteRulesActionFaultInjectionPolicy{} } items := make([]HttpRouteRulesActionFaultInjectionPolicy, 0, len(a)) for _, item := range a { items = append(items, *flattenHttpRouteRulesActionFaultInjectionPolicy(c, item.(map[string]interface{}), res)) } return items } // expandHttpRouteRulesActionFaultInjectionPolicy expands an instance of HttpRouteRulesActionFaultInjectionPolicy into a JSON // request object. func expandHttpRouteRulesActionFaultInjectionPolicy(c *Client, f *HttpRouteRulesActionFaultInjectionPolicy, res *HttpRoute) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v, err := expandHttpRouteRulesActionFaultInjectionPolicyDelay(c, f.Delay, res); err != nil { return nil, fmt.Errorf("error expanding Delay into delay: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["delay"] = v } if v, err := expandHttpRouteRulesActionFaultInjectionPolicyAbort(c, f.Abort, res); err != nil { return nil, fmt.Errorf("error expanding Abort into abort: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["abort"] = v } return m, nil } // flattenHttpRouteRulesActionFaultInjectionPolicy flattens an instance of HttpRouteRulesActionFaultInjectionPolicy from a JSON // response object. func flattenHttpRouteRulesActionFaultInjectionPolicy(c *Client, i interface{}, res *HttpRoute) *HttpRouteRulesActionFaultInjectionPolicy { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &HttpRouteRulesActionFaultInjectionPolicy{} if dcl.IsEmptyValueIndirect(i) { return EmptyHttpRouteRulesActionFaultInjectionPolicy } r.Delay = flattenHttpRouteRulesActionFaultInjectionPolicyDelay(c, m["delay"], res) r.Abort = flattenHttpRouteRulesActionFaultInjectionPolicyAbort(c, m["abort"], res) return r } // expandHttpRouteRulesActionFaultInjectionPolicyDelayMap expands the contents of HttpRouteRulesActionFaultInjectionPolicyDelay into a JSON // request object. func expandHttpRouteRulesActionFaultInjectionPolicyDelayMap(c *Client, f map[string]HttpRouteRulesActionFaultInjectionPolicyDelay, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandHttpRouteRulesActionFaultInjectionPolicyDelay(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandHttpRouteRulesActionFaultInjectionPolicyDelaySlice expands the contents of HttpRouteRulesActionFaultInjectionPolicyDelay into a JSON // request object. func expandHttpRouteRulesActionFaultInjectionPolicyDelaySlice(c *Client, f []HttpRouteRulesActionFaultInjectionPolicyDelay, res *HttpRoute) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandHttpRouteRulesActionFaultInjectionPolicyDelay(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenHttpRouteRulesActionFaultInjectionPolicyDelayMap flattens the contents of HttpRouteRulesActionFaultInjectionPolicyDelay from a JSON // response object. func flattenHttpRouteRulesActionFaultInjectionPolicyDelayMap(c *Client, i interface{}, res *HttpRoute) map[string]HttpRouteRulesActionFaultInjectionPolicyDelay { a, ok := i.(map[string]interface{}) if !ok { return map[string]HttpRouteRulesActionFaultInjectionPolicyDelay{} } if len(a) == 0 { return map[string]HttpRouteRulesActionFaultInjectionPolicyDelay{} } items := make(map[string]HttpRouteRulesActionFaultInjectionPolicyDelay) for k, item := range a { items[k] = *flattenHttpRouteRulesActionFaultInjectionPolicyDelay(c, item.(map[string]interface{}), res) } return items } // flattenHttpRouteRulesActionFaultInjectionPolicyDelaySlice flattens the contents of HttpRouteRulesActionFaultInjectionPolicyDelay from a JSON // response object. func flattenHttpRouteRulesActionFaultInjectionPolicyDelaySlice(c *Client, i interface{}, res *HttpRoute) []HttpRouteRulesActionFaultInjectionPolicyDelay { a, ok := i.([]interface{}) if !ok { return []HttpRouteRulesActionFaultInjectionPolicyDelay{} } if len(a) == 0 { return []HttpRouteRulesActionFaultInjectionPolicyDelay{} } items := make([]HttpRouteRulesActionFaultInjectionPolicyDelay, 0, len(a)) for _, item := range a { items = append(items, *flattenHttpRouteRulesActionFaultInjectionPolicyDelay(c, item.(map[string]interface{}), res)) } return items } // expandHttpRouteRulesActionFaultInjectionPolicyDelay expands an instance of HttpRouteRulesActionFaultInjectionPolicyDelay into a JSON // request object. func expandHttpRouteRulesActionFaultInjectionPolicyDelay(c *Client, f *HttpRouteRulesActionFaultInjectionPolicyDelay, res *HttpRoute) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.FixedDelay; !dcl.IsEmptyValueIndirect(v) { m["fixedDelay"] = v } if v := f.Percentage; !dcl.IsEmptyValueIndirect(v) { m["percentage"] = v } return m, nil } // flattenHttpRouteRulesActionFaultInjectionPolicyDelay flattens an instance of HttpRouteRulesActionFaultInjectionPolicyDelay from a JSON // response object. func flattenHttpRouteRulesActionFaultInjectionPolicyDelay(c *Client, i interface{}, res *HttpRoute) *HttpRouteRulesActionFaultInjectionPolicyDelay { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &HttpRouteRulesActionFaultInjectionPolicyDelay{} if dcl.IsEmptyValueIndirect(i) { return EmptyHttpRouteRulesActionFaultInjectionPolicyDelay } r.FixedDelay = dcl.FlattenString(m["fixedDelay"]) r.Percentage = dcl.FlattenInteger(m["percentage"]) return r } // expandHttpRouteRulesActionFaultInjectionPolicyAbortMap expands the contents of HttpRouteRulesActionFaultInjectionPolicyAbort into a JSON // request object. func expandHttpRouteRulesActionFaultInjectionPolicyAbortMap(c *Client, f map[string]HttpRouteRulesActionFaultInjectionPolicyAbort, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandHttpRouteRulesActionFaultInjectionPolicyAbort(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandHttpRouteRulesActionFaultInjectionPolicyAbortSlice expands the contents of HttpRouteRulesActionFaultInjectionPolicyAbort into a JSON // request object. func expandHttpRouteRulesActionFaultInjectionPolicyAbortSlice(c *Client, f []HttpRouteRulesActionFaultInjectionPolicyAbort, res *HttpRoute) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandHttpRouteRulesActionFaultInjectionPolicyAbort(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenHttpRouteRulesActionFaultInjectionPolicyAbortMap flattens the contents of HttpRouteRulesActionFaultInjectionPolicyAbort from a JSON // response object. func flattenHttpRouteRulesActionFaultInjectionPolicyAbortMap(c *Client, i interface{}, res *HttpRoute) map[string]HttpRouteRulesActionFaultInjectionPolicyAbort { a, ok := i.(map[string]interface{}) if !ok { return map[string]HttpRouteRulesActionFaultInjectionPolicyAbort{} } if len(a) == 0 { return map[string]HttpRouteRulesActionFaultInjectionPolicyAbort{} } items := make(map[string]HttpRouteRulesActionFaultInjectionPolicyAbort) for k, item := range a { items[k] = *flattenHttpRouteRulesActionFaultInjectionPolicyAbort(c, item.(map[string]interface{}), res) } return items } // flattenHttpRouteRulesActionFaultInjectionPolicyAbortSlice flattens the contents of HttpRouteRulesActionFaultInjectionPolicyAbort from a JSON // response object. func flattenHttpRouteRulesActionFaultInjectionPolicyAbortSlice(c *Client, i interface{}, res *HttpRoute) []HttpRouteRulesActionFaultInjectionPolicyAbort { a, ok := i.([]interface{}) if !ok { return []HttpRouteRulesActionFaultInjectionPolicyAbort{} } if len(a) == 0 { return []HttpRouteRulesActionFaultInjectionPolicyAbort{} } items := make([]HttpRouteRulesActionFaultInjectionPolicyAbort, 0, len(a)) for _, item := range a { items = append(items, *flattenHttpRouteRulesActionFaultInjectionPolicyAbort(c, item.(map[string]interface{}), res)) } return items } // expandHttpRouteRulesActionFaultInjectionPolicyAbort expands an instance of HttpRouteRulesActionFaultInjectionPolicyAbort into a JSON // request object. func expandHttpRouteRulesActionFaultInjectionPolicyAbort(c *Client, f *HttpRouteRulesActionFaultInjectionPolicyAbort, res *HttpRoute) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.HttpStatus; !dcl.IsEmptyValueIndirect(v) { m["httpStatus"] = v } if v := f.Percentage; !dcl.IsEmptyValueIndirect(v) { m["percentage"] = v } return m, nil } // flattenHttpRouteRulesActionFaultInjectionPolicyAbort flattens an instance of HttpRouteRulesActionFaultInjectionPolicyAbort from a JSON // response object. func flattenHttpRouteRulesActionFaultInjectionPolicyAbort(c *Client, i interface{}, res *HttpRoute) *HttpRouteRulesActionFaultInjectionPolicyAbort { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &HttpRouteRulesActionFaultInjectionPolicyAbort{} if dcl.IsEmptyValueIndirect(i) { return EmptyHttpRouteRulesActionFaultInjectionPolicyAbort } r.HttpStatus = dcl.FlattenInteger(m["httpStatus"]) r.Percentage = dcl.FlattenInteger(m["percentage"]) return r } // expandHttpRouteRulesActionRequestHeaderModifierMap expands the contents of HttpRouteRulesActionRequestHeaderModifier into a JSON // request object. func expandHttpRouteRulesActionRequestHeaderModifierMap(c *Client, f map[string]HttpRouteRulesActionRequestHeaderModifier, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandHttpRouteRulesActionRequestHeaderModifier(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandHttpRouteRulesActionRequestHeaderModifierSlice expands the contents of HttpRouteRulesActionRequestHeaderModifier into a JSON // request object. func expandHttpRouteRulesActionRequestHeaderModifierSlice(c *Client, f []HttpRouteRulesActionRequestHeaderModifier, res *HttpRoute) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandHttpRouteRulesActionRequestHeaderModifier(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenHttpRouteRulesActionRequestHeaderModifierMap flattens the contents of HttpRouteRulesActionRequestHeaderModifier from a JSON // response object. func flattenHttpRouteRulesActionRequestHeaderModifierMap(c *Client, i interface{}, res *HttpRoute) map[string]HttpRouteRulesActionRequestHeaderModifier { a, ok := i.(map[string]interface{}) if !ok { return map[string]HttpRouteRulesActionRequestHeaderModifier{} } if len(a) == 0 { return map[string]HttpRouteRulesActionRequestHeaderModifier{} } items := make(map[string]HttpRouteRulesActionRequestHeaderModifier) for k, item := range a { items[k] = *flattenHttpRouteRulesActionRequestHeaderModifier(c, item.(map[string]interface{}), res) } return items } // flattenHttpRouteRulesActionRequestHeaderModifierSlice flattens the contents of HttpRouteRulesActionRequestHeaderModifier from a JSON // response object. func flattenHttpRouteRulesActionRequestHeaderModifierSlice(c *Client, i interface{}, res *HttpRoute) []HttpRouteRulesActionRequestHeaderModifier { a, ok := i.([]interface{}) if !ok { return []HttpRouteRulesActionRequestHeaderModifier{} } if len(a) == 0 { return []HttpRouteRulesActionRequestHeaderModifier{} } items := make([]HttpRouteRulesActionRequestHeaderModifier, 0, len(a)) for _, item := range a { items = append(items, *flattenHttpRouteRulesActionRequestHeaderModifier(c, item.(map[string]interface{}), res)) } return items } // expandHttpRouteRulesActionRequestHeaderModifier expands an instance of HttpRouteRulesActionRequestHeaderModifier into a JSON // request object. func expandHttpRouteRulesActionRequestHeaderModifier(c *Client, f *HttpRouteRulesActionRequestHeaderModifier, res *HttpRoute) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.Set; !dcl.IsEmptyValueIndirect(v) { m["set"] = v } if v := f.Add; !dcl.IsEmptyValueIndirect(v) { m["add"] = v } if v := f.Remove; v != nil { m["remove"] = v } return m, nil } // flattenHttpRouteRulesActionRequestHeaderModifier flattens an instance of HttpRouteRulesActionRequestHeaderModifier from a JSON // response object. func flattenHttpRouteRulesActionRequestHeaderModifier(c *Client, i interface{}, res *HttpRoute) *HttpRouteRulesActionRequestHeaderModifier { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &HttpRouteRulesActionRequestHeaderModifier{} if dcl.IsEmptyValueIndirect(i) { return EmptyHttpRouteRulesActionRequestHeaderModifier } r.Set = dcl.FlattenKeyValuePairs(m["set"]) r.Add = dcl.FlattenKeyValuePairs(m["add"]) r.Remove = dcl.FlattenStringSlice(m["remove"]) return r } // expandHttpRouteRulesActionResponseHeaderModifierMap expands the contents of HttpRouteRulesActionResponseHeaderModifier into a JSON // request object. func expandHttpRouteRulesActionResponseHeaderModifierMap(c *Client, f map[string]HttpRouteRulesActionResponseHeaderModifier, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandHttpRouteRulesActionResponseHeaderModifier(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandHttpRouteRulesActionResponseHeaderModifierSlice expands the contents of HttpRouteRulesActionResponseHeaderModifier into a JSON // request object. func expandHttpRouteRulesActionResponseHeaderModifierSlice(c *Client, f []HttpRouteRulesActionResponseHeaderModifier, res *HttpRoute) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandHttpRouteRulesActionResponseHeaderModifier(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenHttpRouteRulesActionResponseHeaderModifierMap flattens the contents of HttpRouteRulesActionResponseHeaderModifier from a JSON // response object. func flattenHttpRouteRulesActionResponseHeaderModifierMap(c *Client, i interface{}, res *HttpRoute) map[string]HttpRouteRulesActionResponseHeaderModifier { a, ok := i.(map[string]interface{}) if !ok { return map[string]HttpRouteRulesActionResponseHeaderModifier{} } if len(a) == 0 { return map[string]HttpRouteRulesActionResponseHeaderModifier{} } items := make(map[string]HttpRouteRulesActionResponseHeaderModifier) for k, item := range a { items[k] = *flattenHttpRouteRulesActionResponseHeaderModifier(c, item.(map[string]interface{}), res) } return items } // flattenHttpRouteRulesActionResponseHeaderModifierSlice flattens the contents of HttpRouteRulesActionResponseHeaderModifier from a JSON // response object. func flattenHttpRouteRulesActionResponseHeaderModifierSlice(c *Client, i interface{}, res *HttpRoute) []HttpRouteRulesActionResponseHeaderModifier { a, ok := i.([]interface{}) if !ok { return []HttpRouteRulesActionResponseHeaderModifier{} } if len(a) == 0 { return []HttpRouteRulesActionResponseHeaderModifier{} } items := make([]HttpRouteRulesActionResponseHeaderModifier, 0, len(a)) for _, item := range a { items = append(items, *flattenHttpRouteRulesActionResponseHeaderModifier(c, item.(map[string]interface{}), res)) } return items } // expandHttpRouteRulesActionResponseHeaderModifier expands an instance of HttpRouteRulesActionResponseHeaderModifier into a JSON // request object. func expandHttpRouteRulesActionResponseHeaderModifier(c *Client, f *HttpRouteRulesActionResponseHeaderModifier, res *HttpRoute) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.Set; !dcl.IsEmptyValueIndirect(v) { m["set"] = v } if v := f.Add; !dcl.IsEmptyValueIndirect(v) { m["add"] = v } if v := f.Remove; v != nil { m["remove"] = v } return m, nil } // flattenHttpRouteRulesActionResponseHeaderModifier flattens an instance of HttpRouteRulesActionResponseHeaderModifier from a JSON // response object. func flattenHttpRouteRulesActionResponseHeaderModifier(c *Client, i interface{}, res *HttpRoute) *HttpRouteRulesActionResponseHeaderModifier { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &HttpRouteRulesActionResponseHeaderModifier{} if dcl.IsEmptyValueIndirect(i) { return EmptyHttpRouteRulesActionResponseHeaderModifier } r.Set = dcl.FlattenKeyValuePairs(m["set"]) r.Add = dcl.FlattenKeyValuePairs(m["add"]) r.Remove = dcl.FlattenStringSlice(m["remove"]) return r } // expandHttpRouteRulesActionUrlRewriteMap expands the contents of HttpRouteRulesActionUrlRewrite into a JSON // request object. func expandHttpRouteRulesActionUrlRewriteMap(c *Client, f map[string]HttpRouteRulesActionUrlRewrite, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandHttpRouteRulesActionUrlRewrite(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandHttpRouteRulesActionUrlRewriteSlice expands the contents of HttpRouteRulesActionUrlRewrite into a JSON // request object. func expandHttpRouteRulesActionUrlRewriteSlice(c *Client, f []HttpRouteRulesActionUrlRewrite, res *HttpRoute) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandHttpRouteRulesActionUrlRewrite(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenHttpRouteRulesActionUrlRewriteMap flattens the contents of HttpRouteRulesActionUrlRewrite from a JSON // response object. func flattenHttpRouteRulesActionUrlRewriteMap(c *Client, i interface{}, res *HttpRoute) map[string]HttpRouteRulesActionUrlRewrite { a, ok := i.(map[string]interface{}) if !ok { return map[string]HttpRouteRulesActionUrlRewrite{} } if len(a) == 0 { return map[string]HttpRouteRulesActionUrlRewrite{} } items := make(map[string]HttpRouteRulesActionUrlRewrite) for k, item := range a { items[k] = *flattenHttpRouteRulesActionUrlRewrite(c, item.(map[string]interface{}), res) } return items } // flattenHttpRouteRulesActionUrlRewriteSlice flattens the contents of HttpRouteRulesActionUrlRewrite from a JSON // response object. func flattenHttpRouteRulesActionUrlRewriteSlice(c *Client, i interface{}, res *HttpRoute) []HttpRouteRulesActionUrlRewrite { a, ok := i.([]interface{}) if !ok { return []HttpRouteRulesActionUrlRewrite{} } if len(a) == 0 { return []HttpRouteRulesActionUrlRewrite{} } items := make([]HttpRouteRulesActionUrlRewrite, 0, len(a)) for _, item := range a { items = append(items, *flattenHttpRouteRulesActionUrlRewrite(c, item.(map[string]interface{}), res)) } return items } // expandHttpRouteRulesActionUrlRewrite expands an instance of HttpRouteRulesActionUrlRewrite into a JSON // request object. func expandHttpRouteRulesActionUrlRewrite(c *Client, f *HttpRouteRulesActionUrlRewrite, res *HttpRoute) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.PathPrefixRewrite; !dcl.IsEmptyValueIndirect(v) { m["pathPrefixRewrite"] = v } if v := f.HostRewrite; !dcl.IsEmptyValueIndirect(v) { m["hostRewrite"] = v } return m, nil } // flattenHttpRouteRulesActionUrlRewrite flattens an instance of HttpRouteRulesActionUrlRewrite from a JSON // response object. func flattenHttpRouteRulesActionUrlRewrite(c *Client, i interface{}, res *HttpRoute) *HttpRouteRulesActionUrlRewrite { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &HttpRouteRulesActionUrlRewrite{} if dcl.IsEmptyValueIndirect(i) { return EmptyHttpRouteRulesActionUrlRewrite } r.PathPrefixRewrite = dcl.FlattenString(m["pathPrefixRewrite"]) r.HostRewrite = dcl.FlattenString(m["hostRewrite"]) return r } // expandHttpRouteRulesActionRetryPolicyMap expands the contents of HttpRouteRulesActionRetryPolicy into a JSON // request object. func expandHttpRouteRulesActionRetryPolicyMap(c *Client, f map[string]HttpRouteRulesActionRetryPolicy, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandHttpRouteRulesActionRetryPolicy(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandHttpRouteRulesActionRetryPolicySlice expands the contents of HttpRouteRulesActionRetryPolicy into a JSON // request object. func expandHttpRouteRulesActionRetryPolicySlice(c *Client, f []HttpRouteRulesActionRetryPolicy, res *HttpRoute) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandHttpRouteRulesActionRetryPolicy(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenHttpRouteRulesActionRetryPolicyMap flattens the contents of HttpRouteRulesActionRetryPolicy from a JSON // response object. func flattenHttpRouteRulesActionRetryPolicyMap(c *Client, i interface{}, res *HttpRoute) map[string]HttpRouteRulesActionRetryPolicy { a, ok := i.(map[string]interface{}) if !ok { return map[string]HttpRouteRulesActionRetryPolicy{} } if len(a) == 0 { return map[string]HttpRouteRulesActionRetryPolicy{} } items := make(map[string]HttpRouteRulesActionRetryPolicy) for k, item := range a { items[k] = *flattenHttpRouteRulesActionRetryPolicy(c, item.(map[string]interface{}), res) } return items } // flattenHttpRouteRulesActionRetryPolicySlice flattens the contents of HttpRouteRulesActionRetryPolicy from a JSON // response object. func flattenHttpRouteRulesActionRetryPolicySlice(c *Client, i interface{}, res *HttpRoute) []HttpRouteRulesActionRetryPolicy { a, ok := i.([]interface{}) if !ok { return []HttpRouteRulesActionRetryPolicy{} } if len(a) == 0 { return []HttpRouteRulesActionRetryPolicy{} } items := make([]HttpRouteRulesActionRetryPolicy, 0, len(a)) for _, item := range a { items = append(items, *flattenHttpRouteRulesActionRetryPolicy(c, item.(map[string]interface{}), res)) } return items } // expandHttpRouteRulesActionRetryPolicy expands an instance of HttpRouteRulesActionRetryPolicy into a JSON // request object. func expandHttpRouteRulesActionRetryPolicy(c *Client, f *HttpRouteRulesActionRetryPolicy, res *HttpRoute) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.RetryConditions; v != nil { m["retryConditions"] = v } if v := f.NumRetries; !dcl.IsEmptyValueIndirect(v) { m["numRetries"] = v } if v := f.PerTryTimeout; !dcl.IsEmptyValueIndirect(v) { m["perTryTimeout"] = v } return m, nil } // flattenHttpRouteRulesActionRetryPolicy flattens an instance of HttpRouteRulesActionRetryPolicy from a JSON // response object. func flattenHttpRouteRulesActionRetryPolicy(c *Client, i interface{}, res *HttpRoute) *HttpRouteRulesActionRetryPolicy { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &HttpRouteRulesActionRetryPolicy{} if dcl.IsEmptyValueIndirect(i) { return EmptyHttpRouteRulesActionRetryPolicy } r.RetryConditions = dcl.FlattenStringSlice(m["retryConditions"]) r.NumRetries = dcl.FlattenInteger(m["numRetries"]) r.PerTryTimeout = dcl.FlattenString(m["perTryTimeout"]) return r } // expandHttpRouteRulesActionRequestMirrorPolicyMap expands the contents of HttpRouteRulesActionRequestMirrorPolicy into a JSON // request object. func expandHttpRouteRulesActionRequestMirrorPolicyMap(c *Client, f map[string]HttpRouteRulesActionRequestMirrorPolicy, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandHttpRouteRulesActionRequestMirrorPolicy(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandHttpRouteRulesActionRequestMirrorPolicySlice expands the contents of HttpRouteRulesActionRequestMirrorPolicy into a JSON // request object. func expandHttpRouteRulesActionRequestMirrorPolicySlice(c *Client, f []HttpRouteRulesActionRequestMirrorPolicy, res *HttpRoute) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandHttpRouteRulesActionRequestMirrorPolicy(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenHttpRouteRulesActionRequestMirrorPolicyMap flattens the contents of HttpRouteRulesActionRequestMirrorPolicy from a JSON // response object. func flattenHttpRouteRulesActionRequestMirrorPolicyMap(c *Client, i interface{}, res *HttpRoute) map[string]HttpRouteRulesActionRequestMirrorPolicy { a, ok := i.(map[string]interface{}) if !ok { return map[string]HttpRouteRulesActionRequestMirrorPolicy{} } if len(a) == 0 { return map[string]HttpRouteRulesActionRequestMirrorPolicy{} } items := make(map[string]HttpRouteRulesActionRequestMirrorPolicy) for k, item := range a { items[k] = *flattenHttpRouteRulesActionRequestMirrorPolicy(c, item.(map[string]interface{}), res) } return items } // flattenHttpRouteRulesActionRequestMirrorPolicySlice flattens the contents of HttpRouteRulesActionRequestMirrorPolicy from a JSON // response object. func flattenHttpRouteRulesActionRequestMirrorPolicySlice(c *Client, i interface{}, res *HttpRoute) []HttpRouteRulesActionRequestMirrorPolicy { a, ok := i.([]interface{}) if !ok { return []HttpRouteRulesActionRequestMirrorPolicy{} } if len(a) == 0 { return []HttpRouteRulesActionRequestMirrorPolicy{} } items := make([]HttpRouteRulesActionRequestMirrorPolicy, 0, len(a)) for _, item := range a { items = append(items, *flattenHttpRouteRulesActionRequestMirrorPolicy(c, item.(map[string]interface{}), res)) } return items } // expandHttpRouteRulesActionRequestMirrorPolicy expands an instance of HttpRouteRulesActionRequestMirrorPolicy into a JSON // request object. func expandHttpRouteRulesActionRequestMirrorPolicy(c *Client, f *HttpRouteRulesActionRequestMirrorPolicy, res *HttpRoute) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v, err := expandHttpRouteRulesActionRequestMirrorPolicyDestination(c, f.Destination, res); err != nil { return nil, fmt.Errorf("error expanding Destination into destination: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["destination"] = v } return m, nil } // flattenHttpRouteRulesActionRequestMirrorPolicy flattens an instance of HttpRouteRulesActionRequestMirrorPolicy from a JSON // response object. func flattenHttpRouteRulesActionRequestMirrorPolicy(c *Client, i interface{}, res *HttpRoute) *HttpRouteRulesActionRequestMirrorPolicy { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &HttpRouteRulesActionRequestMirrorPolicy{} if dcl.IsEmptyValueIndirect(i) { return EmptyHttpRouteRulesActionRequestMirrorPolicy } r.Destination = flattenHttpRouteRulesActionRequestMirrorPolicyDestination(c, m["destination"], res) return r } // expandHttpRouteRulesActionRequestMirrorPolicyDestinationMap expands the contents of HttpRouteRulesActionRequestMirrorPolicyDestination into a JSON // request object. func expandHttpRouteRulesActionRequestMirrorPolicyDestinationMap(c *Client, f map[string]HttpRouteRulesActionRequestMirrorPolicyDestination, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandHttpRouteRulesActionRequestMirrorPolicyDestination(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandHttpRouteRulesActionRequestMirrorPolicyDestinationSlice expands the contents of HttpRouteRulesActionRequestMirrorPolicyDestination into a JSON // request object. func expandHttpRouteRulesActionRequestMirrorPolicyDestinationSlice(c *Client, f []HttpRouteRulesActionRequestMirrorPolicyDestination, res *HttpRoute) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandHttpRouteRulesActionRequestMirrorPolicyDestination(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenHttpRouteRulesActionRequestMirrorPolicyDestinationMap flattens the contents of HttpRouteRulesActionRequestMirrorPolicyDestination from a JSON // response object. func flattenHttpRouteRulesActionRequestMirrorPolicyDestinationMap(c *Client, i interface{}, res *HttpRoute) map[string]HttpRouteRulesActionRequestMirrorPolicyDestination { a, ok := i.(map[string]interface{}) if !ok { return map[string]HttpRouteRulesActionRequestMirrorPolicyDestination{} } if len(a) == 0 { return map[string]HttpRouteRulesActionRequestMirrorPolicyDestination{} } items := make(map[string]HttpRouteRulesActionRequestMirrorPolicyDestination) for k, item := range a { items[k] = *flattenHttpRouteRulesActionRequestMirrorPolicyDestination(c, item.(map[string]interface{}), res) } return items } // flattenHttpRouteRulesActionRequestMirrorPolicyDestinationSlice flattens the contents of HttpRouteRulesActionRequestMirrorPolicyDestination from a JSON // response object. func flattenHttpRouteRulesActionRequestMirrorPolicyDestinationSlice(c *Client, i interface{}, res *HttpRoute) []HttpRouteRulesActionRequestMirrorPolicyDestination { a, ok := i.([]interface{}) if !ok { return []HttpRouteRulesActionRequestMirrorPolicyDestination{} } if len(a) == 0 { return []HttpRouteRulesActionRequestMirrorPolicyDestination{} } items := make([]HttpRouteRulesActionRequestMirrorPolicyDestination, 0, len(a)) for _, item := range a { items = append(items, *flattenHttpRouteRulesActionRequestMirrorPolicyDestination(c, item.(map[string]interface{}), res)) } return items } // expandHttpRouteRulesActionRequestMirrorPolicyDestination expands an instance of HttpRouteRulesActionRequestMirrorPolicyDestination into a JSON // request object. func expandHttpRouteRulesActionRequestMirrorPolicyDestination(c *Client, f *HttpRouteRulesActionRequestMirrorPolicyDestination, res *HttpRoute) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.Weight; !dcl.IsEmptyValueIndirect(v) { m["weight"] = v } if v := f.ServiceName; !dcl.IsEmptyValueIndirect(v) { m["serviceName"] = v } return m, nil } // flattenHttpRouteRulesActionRequestMirrorPolicyDestination flattens an instance of HttpRouteRulesActionRequestMirrorPolicyDestination from a JSON // response object. func flattenHttpRouteRulesActionRequestMirrorPolicyDestination(c *Client, i interface{}, res *HttpRoute) *HttpRouteRulesActionRequestMirrorPolicyDestination { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &HttpRouteRulesActionRequestMirrorPolicyDestination{} if dcl.IsEmptyValueIndirect(i) { return EmptyHttpRouteRulesActionRequestMirrorPolicyDestination } r.Weight = dcl.FlattenInteger(m["weight"]) r.ServiceName = dcl.FlattenString(m["serviceName"]) return r } // expandHttpRouteRulesActionCorsPolicyMap expands the contents of HttpRouteRulesActionCorsPolicy into a JSON // request object. func expandHttpRouteRulesActionCorsPolicyMap(c *Client, f map[string]HttpRouteRulesActionCorsPolicy, res *HttpRoute) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandHttpRouteRulesActionCorsPolicy(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandHttpRouteRulesActionCorsPolicySlice expands the contents of HttpRouteRulesActionCorsPolicy into a JSON // request object. func expandHttpRouteRulesActionCorsPolicySlice(c *Client, f []HttpRouteRulesActionCorsPolicy, res *HttpRoute) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandHttpRouteRulesActionCorsPolicy(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenHttpRouteRulesActionCorsPolicyMap flattens the contents of HttpRouteRulesActionCorsPolicy from a JSON // response object. func flattenHttpRouteRulesActionCorsPolicyMap(c *Client, i interface{}, res *HttpRoute) map[string]HttpRouteRulesActionCorsPolicy { a, ok := i.(map[string]interface{}) if !ok { return map[string]HttpRouteRulesActionCorsPolicy{} } if len(a) == 0 { return map[string]HttpRouteRulesActionCorsPolicy{} } items := make(map[string]HttpRouteRulesActionCorsPolicy) for k, item := range a { items[k] = *flattenHttpRouteRulesActionCorsPolicy(c, item.(map[string]interface{}), res) } return items } // flattenHttpRouteRulesActionCorsPolicySlice flattens the contents of HttpRouteRulesActionCorsPolicy from a JSON // response object. func flattenHttpRouteRulesActionCorsPolicySlice(c *Client, i interface{}, res *HttpRoute) []HttpRouteRulesActionCorsPolicy { a, ok := i.([]interface{}) if !ok { return []HttpRouteRulesActionCorsPolicy{} } if len(a) == 0 { return []HttpRouteRulesActionCorsPolicy{} } items := make([]HttpRouteRulesActionCorsPolicy, 0, len(a)) for _, item := range a { items = append(items, *flattenHttpRouteRulesActionCorsPolicy(c, item.(map[string]interface{}), res)) } return items } // expandHttpRouteRulesActionCorsPolicy expands an instance of HttpRouteRulesActionCorsPolicy into a JSON // request object. func expandHttpRouteRulesActionCorsPolicy(c *Client, f *HttpRouteRulesActionCorsPolicy, res *HttpRoute) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.AllowOrigins; v != nil { m["allowOrigins"] = v } if v := f.AllowOriginRegexes; v != nil { m["allowOriginRegexes"] = v } if v := f.AllowMethods; v != nil { m["allowMethods"] = v } if v := f.AllowHeaders; v != nil { m["allowHeaders"] = v } if v := f.ExposeHeaders; v != nil { m["exposeHeaders"] = v } if v := f.MaxAge; !dcl.IsEmptyValueIndirect(v) { m["maxAge"] = v } if v := f.AllowCredentials; !dcl.IsEmptyValueIndirect(v) { m["allowCredentials"] = v } if v := f.Disabled; !dcl.IsEmptyValueIndirect(v) { m["disabled"] = v } return m, nil } // flattenHttpRouteRulesActionCorsPolicy flattens an instance of HttpRouteRulesActionCorsPolicy from a JSON // response object. func flattenHttpRouteRulesActionCorsPolicy(c *Client, i interface{}, res *HttpRoute) *HttpRouteRulesActionCorsPolicy { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &HttpRouteRulesActionCorsPolicy{} if dcl.IsEmptyValueIndirect(i) { return EmptyHttpRouteRulesActionCorsPolicy } r.AllowOrigins = dcl.FlattenStringSlice(m["allowOrigins"]) r.AllowOriginRegexes = dcl.FlattenStringSlice(m["allowOriginRegexes"]) r.AllowMethods = dcl.FlattenStringSlice(m["allowMethods"]) r.AllowHeaders = dcl.FlattenStringSlice(m["allowHeaders"]) r.ExposeHeaders = dcl.FlattenStringSlice(m["exposeHeaders"]) r.MaxAge = dcl.FlattenString(m["maxAge"]) r.AllowCredentials = dcl.FlattenBool(m["allowCredentials"]) r.Disabled = dcl.FlattenBool(m["disabled"]) return r } // flattenHttpRouteRulesActionRedirectResponseCodeEnumMap flattens the contents of HttpRouteRulesActionRedirectResponseCodeEnum from a JSON // response object. func flattenHttpRouteRulesActionRedirectResponseCodeEnumMap(c *Client, i interface{}, res *HttpRoute) map[string]HttpRouteRulesActionRedirectResponseCodeEnum { a, ok := i.(map[string]interface{}) if !ok { return map[string]HttpRouteRulesActionRedirectResponseCodeEnum{} } if len(a) == 0 { return map[string]HttpRouteRulesActionRedirectResponseCodeEnum{} } items := make(map[string]HttpRouteRulesActionRedirectResponseCodeEnum) for k, item := range a { items[k] = *flattenHttpRouteRulesActionRedirectResponseCodeEnum(item.(interface{})) } return items } // flattenHttpRouteRulesActionRedirectResponseCodeEnumSlice flattens the contents of HttpRouteRulesActionRedirectResponseCodeEnum from a JSON // response object. func flattenHttpRouteRulesActionRedirectResponseCodeEnumSlice(c *Client, i interface{}, res *HttpRoute) []HttpRouteRulesActionRedirectResponseCodeEnum { a, ok := i.([]interface{}) if !ok { return []HttpRouteRulesActionRedirectResponseCodeEnum{} } if len(a) == 0 { return []HttpRouteRulesActionRedirectResponseCodeEnum{} } items := make([]HttpRouteRulesActionRedirectResponseCodeEnum, 0, len(a)) for _, item := range a { items = append(items, *flattenHttpRouteRulesActionRedirectResponseCodeEnum(item.(interface{}))) } return items } // flattenHttpRouteRulesActionRedirectResponseCodeEnum asserts that an interface is a string, and returns a // pointer to a *HttpRouteRulesActionRedirectResponseCodeEnum with the same value as that string. func flattenHttpRouteRulesActionRedirectResponseCodeEnum(i interface{}) *HttpRouteRulesActionRedirectResponseCodeEnum { s, ok := i.(string) if !ok { return nil } return HttpRouteRulesActionRedirectResponseCodeEnumRef(s) } // This function returns a matcher that checks whether a serialized resource matches this resource // in its parameters (as defined by the fields in a Get, which definitionally define resource // identity). This is useful in extracting the element from a List call. func (r *HttpRoute) matcher(c *Client) func([]byte) bool { return func(b []byte) bool { cr, err := unmarshalHttpRoute(b, c, r) if err != nil { c.Config.Logger.Warning("failed to unmarshal provided resource in matcher.") return false } nr := r.urlNormalized() ncr := cr.urlNormalized() c.Config.Logger.Infof("looking for %v\nin %v", nr, ncr) if nr.Project == nil && ncr.Project == nil { c.Config.Logger.Info("Both Project fields null - considering equal.") } else if nr.Project == nil || ncr.Project == nil { c.Config.Logger.Info("Only one Project field is null - considering unequal.") return false } else if *nr.Project != *ncr.Project { return false } if nr.Location == nil && ncr.Location == nil { c.Config.Logger.Info("Both Location fields null - considering equal.") } else if nr.Location == nil || ncr.Location == nil { c.Config.Logger.Info("Only one Location field is null - considering unequal.") return false } else if *nr.Location != *ncr.Location { return false } if nr.Name == nil && ncr.Name == nil { c.Config.Logger.Info("Both Name fields null - considering equal.") } else if nr.Name == nil || ncr.Name == nil { c.Config.Logger.Info("Only one Name field is null - considering unequal.") return false } else if *nr.Name != *ncr.Name { return false } return true } } type httpRouteDiff struct { // The diff should include one or the other of RequiresRecreate or UpdateOp. RequiresRecreate bool UpdateOp httpRouteApiOperation FieldName string // used for error logging } func convertFieldDiffsToHttpRouteDiffs(config *dcl.Config, fds []*dcl.FieldDiff, opts []dcl.ApplyOption) ([]httpRouteDiff, error) { opNamesToFieldDiffs := make(map[string][]*dcl.FieldDiff) // Map each operation name to the field diffs associated with it. for _, fd := range fds { for _, ro := range fd.ResultingOperation { if fieldDiffs, ok := opNamesToFieldDiffs[ro]; ok { fieldDiffs = append(fieldDiffs, fd) opNamesToFieldDiffs[ro] = fieldDiffs } else { config.Logger.Infof("%s required due to diff: %v", ro, fd) opNamesToFieldDiffs[ro] = []*dcl.FieldDiff{fd} } } } var diffs []httpRouteDiff // For each operation name, create a httpRouteDiff which contains the operation. for opName, fieldDiffs := range opNamesToFieldDiffs { // Use the first field diff's field name for logging required recreate error. diff := httpRouteDiff{FieldName: fieldDiffs[0].FieldName} if opName == "Recreate" { diff.RequiresRecreate = true } else { apiOp, err := convertOpNameToHttpRouteApiOperation(opName, fieldDiffs, opts...) if err != nil { return diffs, err } diff.UpdateOp = apiOp } diffs = append(diffs, diff) } return diffs, nil } func convertOpNameToHttpRouteApiOperation(opName string, fieldDiffs []*dcl.FieldDiff, opts ...dcl.ApplyOption) (httpRouteApiOperation, error) { switch opName { case "updateHttpRouteUpdateHttpRouteOperation": return &updateHttpRouteUpdateHttpRouteOperation{FieldDiffs: fieldDiffs}, nil default: return nil, fmt.Errorf("no such operation with name: %v", opName) } } func extractHttpRouteFields(r *HttpRoute) error { return nil } func extractHttpRouteRulesFields(r *HttpRoute, o *HttpRouteRules) error { vAction := o.Action if vAction == nil { // note: explicitly not the empty object. vAction = &HttpRouteRulesAction{} } if err := extractHttpRouteRulesActionFields(r, vAction); err != nil { return err } if !dcl.IsEmptyValueIndirect(vAction) { o.Action = vAction } return nil } func extractHttpRouteRulesMatchesFields(r *HttpRoute, o *HttpRouteRulesMatches) error { return nil } func extractHttpRouteRulesMatchesHeadersFields(r *HttpRoute, o *HttpRouteRulesMatchesHeaders) error { vRangeMatch := o.RangeMatch if vRangeMatch == nil { // note: explicitly not the empty object. vRangeMatch = &HttpRouteRulesMatchesHeadersRangeMatch{} } if err := extractHttpRouteRulesMatchesHeadersRangeMatchFields(r, vRangeMatch); err != nil { return err } if !dcl.IsEmptyValueIndirect(vRangeMatch) { o.RangeMatch = vRangeMatch } return nil } func extractHttpRouteRulesMatchesHeadersRangeMatchFields(r *HttpRoute, o *HttpRouteRulesMatchesHeadersRangeMatch) error { return nil } func extractHttpRouteRulesMatchesQueryParametersFields(r *HttpRoute, o *HttpRouteRulesMatchesQueryParameters) error { return nil } func extractHttpRouteRulesActionFields(r *HttpRoute, o *HttpRouteRulesAction) error { vRedirect := o.Redirect if vRedirect == nil { // note: explicitly not the empty object. vRedirect = &HttpRouteRulesActionRedirect{} } if err := extractHttpRouteRulesActionRedirectFields(r, vRedirect); err != nil { return err } if !dcl.IsEmptyValueIndirect(vRedirect) { o.Redirect = vRedirect } vFaultInjectionPolicy := o.FaultInjectionPolicy if vFaultInjectionPolicy == nil { // note: explicitly not the empty object. vFaultInjectionPolicy = &HttpRouteRulesActionFaultInjectionPolicy{} } if err := extractHttpRouteRulesActionFaultInjectionPolicyFields(r, vFaultInjectionPolicy); err != nil { return err } if !dcl.IsEmptyValueIndirect(vFaultInjectionPolicy) { o.FaultInjectionPolicy = vFaultInjectionPolicy } vRequestHeaderModifier := o.RequestHeaderModifier if vRequestHeaderModifier == nil { // note: explicitly not the empty object. vRequestHeaderModifier = &HttpRouteRulesActionRequestHeaderModifier{} } if err := extractHttpRouteRulesActionRequestHeaderModifierFields(r, vRequestHeaderModifier); err != nil { return err } if !dcl.IsEmptyValueIndirect(vRequestHeaderModifier) { o.RequestHeaderModifier = vRequestHeaderModifier } vResponseHeaderModifier := o.ResponseHeaderModifier if vResponseHeaderModifier == nil { // note: explicitly not the empty object. vResponseHeaderModifier = &HttpRouteRulesActionResponseHeaderModifier{} } if err := extractHttpRouteRulesActionResponseHeaderModifierFields(r, vResponseHeaderModifier); err != nil { return err } if !dcl.IsEmptyValueIndirect(vResponseHeaderModifier) { o.ResponseHeaderModifier = vResponseHeaderModifier } vUrlRewrite := o.UrlRewrite if vUrlRewrite == nil { // note: explicitly not the empty object. vUrlRewrite = &HttpRouteRulesActionUrlRewrite{} } if err := extractHttpRouteRulesActionUrlRewriteFields(r, vUrlRewrite); err != nil { return err } if !dcl.IsEmptyValueIndirect(vUrlRewrite) { o.UrlRewrite = vUrlRewrite } vRetryPolicy := o.RetryPolicy if vRetryPolicy == nil { // note: explicitly not the empty object. vRetryPolicy = &HttpRouteRulesActionRetryPolicy{} } if err := extractHttpRouteRulesActionRetryPolicyFields(r, vRetryPolicy); err != nil { return err } if !dcl.IsEmptyValueIndirect(vRetryPolicy) { o.RetryPolicy = vRetryPolicy } vRequestMirrorPolicy := o.RequestMirrorPolicy if vRequestMirrorPolicy == nil { // note: explicitly not the empty object. vRequestMirrorPolicy = &HttpRouteRulesActionRequestMirrorPolicy{} } if err := extractHttpRouteRulesActionRequestMirrorPolicyFields(r, vRequestMirrorPolicy); err != nil { return err } if !dcl.IsEmptyValueIndirect(vRequestMirrorPolicy) { o.RequestMirrorPolicy = vRequestMirrorPolicy } vCorsPolicy := o.CorsPolicy if vCorsPolicy == nil { // note: explicitly not the empty object. vCorsPolicy = &HttpRouteRulesActionCorsPolicy{} } if err := extractHttpRouteRulesActionCorsPolicyFields(r, vCorsPolicy); err != nil { return err } if !dcl.IsEmptyValueIndirect(vCorsPolicy) { o.CorsPolicy = vCorsPolicy } return nil } func extractHttpRouteRulesActionDestinationsFields(r *HttpRoute, o *HttpRouteRulesActionDestinations) error { return nil } func extractHttpRouteRulesActionRedirectFields(r *HttpRoute, o *HttpRouteRulesActionRedirect) error { return nil } func extractHttpRouteRulesActionFaultInjectionPolicyFields(r *HttpRoute, o *HttpRouteRulesActionFaultInjectionPolicy) error { vDelay := o.Delay if vDelay == nil { // note: explicitly not the empty object. vDelay = &HttpRouteRulesActionFaultInjectionPolicyDelay{} } if err := extractHttpRouteRulesActionFaultInjectionPolicyDelayFields(r, vDelay); err != nil { return err } if !dcl.IsEmptyValueIndirect(vDelay) { o.Delay = vDelay } vAbort := o.Abort if vAbort == nil { // note: explicitly not the empty object. vAbort = &HttpRouteRulesActionFaultInjectionPolicyAbort{} } if err := extractHttpRouteRulesActionFaultInjectionPolicyAbortFields(r, vAbort); err != nil { return err } if !dcl.IsEmptyValueIndirect(vAbort) { o.Abort = vAbort } return nil } func extractHttpRouteRulesActionFaultInjectionPolicyDelayFields(r *HttpRoute, o *HttpRouteRulesActionFaultInjectionPolicyDelay) error { return nil } func extractHttpRouteRulesActionFaultInjectionPolicyAbortFields(r *HttpRoute, o *HttpRouteRulesActionFaultInjectionPolicyAbort) error { return nil } func extractHttpRouteRulesActionRequestHeaderModifierFields(r *HttpRoute, o *HttpRouteRulesActionRequestHeaderModifier) error { return nil } func extractHttpRouteRulesActionResponseHeaderModifierFields(r *HttpRoute, o *HttpRouteRulesActionResponseHeaderModifier) error { return nil } func extractHttpRouteRulesActionUrlRewriteFields(r *HttpRoute, o *HttpRouteRulesActionUrlRewrite) error { return nil } func extractHttpRouteRulesActionRetryPolicyFields(r *HttpRoute, o *HttpRouteRulesActionRetryPolicy) error { return nil } func extractHttpRouteRulesActionRequestMirrorPolicyFields(r *HttpRoute, o *HttpRouteRulesActionRequestMirrorPolicy) error { vDestination := o.Destination if vDestination == nil { // note: explicitly not the empty object. vDestination = &HttpRouteRulesActionRequestMirrorPolicyDestination{} } if err := extractHttpRouteRulesActionRequestMirrorPolicyDestinationFields(r, vDestination); err != nil { return err } if !dcl.IsEmptyValueIndirect(vDestination) { o.Destination = vDestination } return nil } func extractHttpRouteRulesActionRequestMirrorPolicyDestinationFields(r *HttpRoute, o *HttpRouteRulesActionRequestMirrorPolicyDestination) error { return nil } func extractHttpRouteRulesActionCorsPolicyFields(r *HttpRoute, o *HttpRouteRulesActionCorsPolicy) error { return nil } func postReadExtractHttpRouteFields(r *HttpRoute) error { return nil } func postReadExtractHttpRouteRulesFields(r *HttpRoute, o *HttpRouteRules) error { vAction := o.Action if vAction == nil { // note: explicitly not the empty object. vAction = &HttpRouteRulesAction{} } if err := extractHttpRouteRulesActionFields(r, vAction); err != nil { return err } if !dcl.IsEmptyValueIndirect(vAction) { o.Action = vAction } return nil } func postReadExtractHttpRouteRulesMatchesFields(r *HttpRoute, o *HttpRouteRulesMatches) error { return nil } func postReadExtractHttpRouteRulesMatchesHeadersFields(r *HttpRoute, o *HttpRouteRulesMatchesHeaders) error { vRangeMatch := o.RangeMatch if vRangeMatch == nil { // note: explicitly not the empty object. vRangeMatch = &HttpRouteRulesMatchesHeadersRangeMatch{} } if err := extractHttpRouteRulesMatchesHeadersRangeMatchFields(r, vRangeMatch); err != nil { return err } if !dcl.IsEmptyValueIndirect(vRangeMatch) { o.RangeMatch = vRangeMatch } return nil } func postReadExtractHttpRouteRulesMatchesHeadersRangeMatchFields(r *HttpRoute, o *HttpRouteRulesMatchesHeadersRangeMatch) error { return nil } func postReadExtractHttpRouteRulesMatchesQueryParametersFields(r *HttpRoute, o *HttpRouteRulesMatchesQueryParameters) error { return nil } func postReadExtractHttpRouteRulesActionFields(r *HttpRoute, o *HttpRouteRulesAction) error { vRedirect := o.Redirect if vRedirect == nil { // note: explicitly not the empty object. vRedirect = &HttpRouteRulesActionRedirect{} } if err := extractHttpRouteRulesActionRedirectFields(r, vRedirect); err != nil { return err } if !dcl.IsEmptyValueIndirect(vRedirect) { o.Redirect = vRedirect } vFaultInjectionPolicy := o.FaultInjectionPolicy if vFaultInjectionPolicy == nil { // note: explicitly not the empty object. vFaultInjectionPolicy = &HttpRouteRulesActionFaultInjectionPolicy{} } if err := extractHttpRouteRulesActionFaultInjectionPolicyFields(r, vFaultInjectionPolicy); err != nil { return err } if !dcl.IsEmptyValueIndirect(vFaultInjectionPolicy) { o.FaultInjectionPolicy = vFaultInjectionPolicy } vRequestHeaderModifier := o.RequestHeaderModifier if vRequestHeaderModifier == nil { // note: explicitly not the empty object. vRequestHeaderModifier = &HttpRouteRulesActionRequestHeaderModifier{} } if err := extractHttpRouteRulesActionRequestHeaderModifierFields(r, vRequestHeaderModifier); err != nil { return err } if !dcl.IsEmptyValueIndirect(vRequestHeaderModifier) { o.RequestHeaderModifier = vRequestHeaderModifier } vResponseHeaderModifier := o.ResponseHeaderModifier if vResponseHeaderModifier == nil { // note: explicitly not the empty object. vResponseHeaderModifier = &HttpRouteRulesActionResponseHeaderModifier{} } if err := extractHttpRouteRulesActionResponseHeaderModifierFields(r, vResponseHeaderModifier); err != nil { return err } if !dcl.IsEmptyValueIndirect(vResponseHeaderModifier) { o.ResponseHeaderModifier = vResponseHeaderModifier } vUrlRewrite := o.UrlRewrite if vUrlRewrite == nil { // note: explicitly not the empty object. vUrlRewrite = &HttpRouteRulesActionUrlRewrite{} } if err := extractHttpRouteRulesActionUrlRewriteFields(r, vUrlRewrite); err != nil { return err } if !dcl.IsEmptyValueIndirect(vUrlRewrite) { o.UrlRewrite = vUrlRewrite } vRetryPolicy := o.RetryPolicy if vRetryPolicy == nil { // note: explicitly not the empty object. vRetryPolicy = &HttpRouteRulesActionRetryPolicy{} } if err := extractHttpRouteRulesActionRetryPolicyFields(r, vRetryPolicy); err != nil { return err } if !dcl.IsEmptyValueIndirect(vRetryPolicy) { o.RetryPolicy = vRetryPolicy } vRequestMirrorPolicy := o.RequestMirrorPolicy if vRequestMirrorPolicy == nil { // note: explicitly not the empty object. vRequestMirrorPolicy = &HttpRouteRulesActionRequestMirrorPolicy{} } if err := extractHttpRouteRulesActionRequestMirrorPolicyFields(r, vRequestMirrorPolicy); err != nil { return err } if !dcl.IsEmptyValueIndirect(vRequestMirrorPolicy) { o.RequestMirrorPolicy = vRequestMirrorPolicy } vCorsPolicy := o.CorsPolicy if vCorsPolicy == nil { // note: explicitly not the empty object. vCorsPolicy = &HttpRouteRulesActionCorsPolicy{} } if err := extractHttpRouteRulesActionCorsPolicyFields(r, vCorsPolicy); err != nil { return err } if !dcl.IsEmptyValueIndirect(vCorsPolicy) { o.CorsPolicy = vCorsPolicy } return nil } func postReadExtractHttpRouteRulesActionDestinationsFields(r *HttpRoute, o *HttpRouteRulesActionDestinations) error { return nil } func postReadExtractHttpRouteRulesActionRedirectFields(r *HttpRoute, o *HttpRouteRulesActionRedirect) error { return nil } func postReadExtractHttpRouteRulesActionFaultInjectionPolicyFields(r *HttpRoute, o *HttpRouteRulesActionFaultInjectionPolicy) error { vDelay := o.Delay if vDelay == nil { // note: explicitly not the empty object. vDelay = &HttpRouteRulesActionFaultInjectionPolicyDelay{} } if err := extractHttpRouteRulesActionFaultInjectionPolicyDelayFields(r, vDelay); err != nil { return err } if !dcl.IsEmptyValueIndirect(vDelay) { o.Delay = vDelay } vAbort := o.Abort if vAbort == nil { // note: explicitly not the empty object. vAbort = &HttpRouteRulesActionFaultInjectionPolicyAbort{} } if err := extractHttpRouteRulesActionFaultInjectionPolicyAbortFields(r, vAbort); err != nil { return err } if !dcl.IsEmptyValueIndirect(vAbort) { o.Abort = vAbort } return nil } func postReadExtractHttpRouteRulesActionFaultInjectionPolicyDelayFields(r *HttpRoute, o *HttpRouteRulesActionFaultInjectionPolicyDelay) error { return nil } func postReadExtractHttpRouteRulesActionFaultInjectionPolicyAbortFields(r *HttpRoute, o *HttpRouteRulesActionFaultInjectionPolicyAbort) error { return nil } func postReadExtractHttpRouteRulesActionRequestHeaderModifierFields(r *HttpRoute, o *HttpRouteRulesActionRequestHeaderModifier) error { return nil } func postReadExtractHttpRouteRulesActionResponseHeaderModifierFields(r *HttpRoute, o *HttpRouteRulesActionResponseHeaderModifier) error { return nil } func postReadExtractHttpRouteRulesActionUrlRewriteFields(r *HttpRoute, o *HttpRouteRulesActionUrlRewrite) error { return nil } func postReadExtractHttpRouteRulesActionRetryPolicyFields(r *HttpRoute, o *HttpRouteRulesActionRetryPolicy) error { return nil } func postReadExtractHttpRouteRulesActionRequestMirrorPolicyFields(r *HttpRoute, o *HttpRouteRulesActionRequestMirrorPolicy) error { vDestination := o.Destination if vDestination == nil { // note: explicitly not the empty object. vDestination = &HttpRouteRulesActionRequestMirrorPolicyDestination{} } if err := extractHttpRouteRulesActionRequestMirrorPolicyDestinationFields(r, vDestination); err != nil { return err } if !dcl.IsEmptyValueIndirect(vDestination) { o.Destination = vDestination } return nil } func postReadExtractHttpRouteRulesActionRequestMirrorPolicyDestinationFields(r *HttpRoute, o *HttpRouteRulesActionRequestMirrorPolicyDestination) error { return nil } func postReadExtractHttpRouteRulesActionCorsPolicyFields(r *HttpRoute, o *HttpRouteRulesActionCorsPolicy) error { return nil }