# Copyright 2019 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
#
#     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.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.GKEBackup.V1.Model.ResourceFilter do
  @moduledoc """
  ResourceFilter specifies matching criteria to limit the scope of a change to a specific set of kubernetes resources that are selected for restoration from a backup.

  ## Attributes

  *   `groupKinds` (*type:* `list(GoogleApi.GKEBackup.V1.Model.GroupKind.t)`, *default:* `nil`) - Optional. (Filtering parameter) Any resource subject to transformation must belong to one of the listed "types". If this field is not provided, no type filtering will be performed (all resources of all types matching previous filtering parameters will be candidates for transformation).
  *   `jsonPath` (*type:* `String.t`, *default:* `nil`) - Optional. This is a [JSONPath] (https://github.com/json-path/JsonPath/blob/master/README.md) expression that matches specific fields of candidate resources and it operates as a filtering parameter (resources that are not matched with this expression will not be candidates for transformation).
  *   `namespaces` (*type:* `list(String.t)`, *default:* `nil`) - Optional. (Filtering parameter) Any resource subject to transformation must be contained within one of the listed Kubernetes Namespace in the Backup. If this field is not provided, no namespace filtering will be performed (all resources in all Namespaces, including all cluster-scoped resources, will be candidates for transformation).
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :groupKinds => list(GoogleApi.GKEBackup.V1.Model.GroupKind.t()) | nil,
          :jsonPath => String.t() | nil,
          :namespaces => list(String.t()) | nil
        }

  field(:groupKinds, as: GoogleApi.GKEBackup.V1.Model.GroupKind, type: :list)
  field(:jsonPath)
  field(:namespaces, type: :list)
end

defimpl Poison.Decoder, for: GoogleApi.GKEBackup.V1.Model.ResourceFilter do
  def decode(value, options) do
    GoogleApi.GKEBackup.V1.Model.ResourceFilter.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.GKEBackup.V1.Model.ResourceFilter do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
