// Code generated by sidekick. DO NOT EDIT.
//
// Copyright 2026 Google LLC
//
// 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
//
//     https://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.

#if RegionUrlMaps || UrlMaps
  import Foundation
  import GoogleCloudWkt

  /// HttpRouteRuleMatch specifies a set of criteria for matching
  /// requests to an HttpRouteRule. All specified criteria must
  /// be satisfied for a match to occur.
  public struct HttpRouteRuleMatch: Codable, Equatable, GoogleCloudWkt._AnyPackable,
    Sendable
  {
    /// For satisfying the matchRule condition, the path of the
    /// request must exactly match the value specified infullPathMatch after removing any query parameters and anchor
    /// that may be part of the original URL.
    ///
    /// fullPathMatch must be from 1 to 1024 characters.
    ///
    /// Only one of prefixMatch, fullPathMatch,regexMatch or path_template_match must be
    /// specified.
    public var fullPathMatch: Swift.String? = nil

    /// Specifies a list of header match criteria, all of which must match
    /// corresponding headers in the request.
    public var headerMatches: [HttpHeaderMatch] = []

    /// Specifies that prefixMatch and fullPathMatch
    /// matches are case sensitive.
    ///
    /// The default value is false.
    ///
    /// ignoreCase must not be used with regexMatch.
    ///
    /// Not supported when the URL map is bound to a target gRPC proxy.
    public var ignoreCase: Swift.Bool? = nil

    /// Opaque filter criteria used by the load balancer to restrict routing
    /// configuration to a limited set of xDS
    /// compliant clients. In their xDS requests to the load balancer, xDS clients
    /// present node
    /// metadata. When there is a match, the relevant routing configuration
    /// is made available to those proxies.
    ///
    /// For each metadataFilter in this list, if itsfilterMatchCriteria is set to MATCH_ANY, at least one of thefilterLabels must match the corresponding label provided in
    /// the metadata. If its filterMatchCriteria is set to
    /// MATCH_ALL, then all of its filterLabels must match with
    /// corresponding labels provided in the metadata. If multiple
    /// metadata filters are specified, all of them need to be
    /// satisfied in order to be considered a match.
    ///
    /// metadataFilters specified here is applied after those
    /// specified in ForwardingRule that refers to theUrlMap this HttpRouteRuleMatch belongs to.
    ///
    /// metadataFilters only applies to load balancers that haveloadBalancingScheme set toINTERNAL_SELF_MANAGED.
    ///
    /// Not supported when the URL map is bound to a target gRPC proxy that
    /// has validateForProxyless field set to true.
    public var metadataFilters: [MetadataFilter] = []

    /// If specified, this field defines a path template pattern that must match
    /// the :path header after the query string is removed.
    ///
    /// A path template pattern can include variables and wildcards.
    /// Variables are enclosed in curly braces, for example{variable_name}. Wildcards include * that
    /// matches a single path segment, and ** that matches zero or
    /// more path segments. The pattern must follow these rules:
    ///
    ///
    ///       - The value must be between 1 and 1024 characters.
    ///       - The pattern must start with a leading slash ("/").
    ///       - No more than 5 operators (variables or wildcards) may appear in
    ///       the pattern.
    ///
    /// Precisely one ofprefixMatch, fullPathMatch,regexMatch, or pathTemplateMatch must be
    /// set.
    public var pathTemplateMatch: Swift.String? = nil

    /// For satisfying the matchRule condition, the request's
    /// path must begin with the specified prefixMatch.prefixMatch must begin with a /.
    ///
    /// The value must be from 1 to 1024 characters.
    ///
    /// The * character inside a prefix match is
    /// treated as a literal character, not as a wildcard.
    ///
    /// Only one of prefixMatch, fullPathMatch,regexMatch or path_template_match can be
    /// used within a matchRule.
    public var prefixMatch: Swift.String? = nil

    /// Specifies a list of query parameter match criteria, all of which must
    /// match corresponding query parameters in the request.
    ///
    /// Not supported when the URL map is bound to a target gRPC proxy.
    public var queryParameterMatches: [HttpQueryParameterMatch] = []

    /// For satisfying the matchRule condition, the path of the
    /// request must satisfy the regular expression specified inregexMatch after removing any query parameters and anchor
    /// supplied with the original URL. For
    /// more information about regular expression syntax, see Syntax.
    ///
    /// Only one of prefixMatch, fullPathMatch,regexMatch or path_template_match must be
    /// specified.
    ///
    /// Regular expressions can only be used when the loadBalancingScheme is
    /// set to INTERNAL_SELF_MANAGED, EXTERNAL_MANAGED
    /// (regional scope) or INTERNAL_MANAGED.
    public var regexMatch: Swift.String? = nil

    /// Initialize a new instance of `HttpRouteRuleMatch`.
    public init() {}

    /// Use `config` to return a new instance of this object, with some fields updated.
    ///
    /// Commonly used to initialize the value, for example:
    ///
    /// ```
    /// let value = HttpRouteRuleMatch().with { $0.fullPathMatch = ... }
    /// ```
    public func with(_ config: (inout Self) throws -> Swift.Void) rethrows -> Self {
      var copy = self
      try config(&copy)
      return copy
    }

    public static var _anyTypeUrl: Swift.String {
      return "type.googleapis.com/google.cloud.compute.v1.HttpRouteRuleMatch"
    }
    public init(fromAny any: GoogleCloudWkt.`Any`) throws {
      self = try GoogleCloudWkt._slowAnyDeserialize(Self.self, from: any)
    }
    public func _pack() throws -> GoogleCloudWkt.Struct {
      return try GoogleCloudWkt._slowAnySerialize(message: self)
    }
  }
#endif
