# 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.DLP.V2.Model.GooglePrivacyDlpV2InspectConfig do
  @moduledoc """
  Configuration description of the scanning process. When used with redactContent only info_types and min_likelihood are currently used.

  ## Attributes

  *   `contentOptions` (*type:* `list(String.t)`, *default:* `nil`) - Deprecated and unused.
  *   `customInfoTypes` (*type:* `list(GoogleApi.DLP.V2.Model.GooglePrivacyDlpV2CustomInfoType.t)`, *default:* `nil`) - CustomInfoTypes provided by the user. See https://cloud.google.com/sensitive-data-protection/docs/creating-custom-infotypes to learn more.
  *   `excludeInfoTypes` (*type:* `boolean()`, *default:* `nil`) - When true, excludes type information of the findings. This is not used for data profiling.
  *   `includeQuote` (*type:* `boolean()`, *default:* `nil`) - When true, a contextual quote from the data that triggered a finding is included in the response; see Finding.quote. This is not used for data profiling.
  *   `infoTypes` (*type:* `list(GoogleApi.DLP.V2.Model.GooglePrivacyDlpV2InfoType.t)`, *default:* `nil`) - Restricts what info_types to look for. The values must correspond to InfoType values returned by ListInfoTypes or listed at https://cloud.google.com/sensitive-data-protection/docs/infotypes-reference. When no InfoTypes or CustomInfoTypes are specified in a request, the system may automatically choose a default list of detectors to run, which may change over time. If you need precise control and predictability as to what detectors are run you should specify specific InfoTypes listed in the reference, otherwise a default list will be used, which may change over time.
  *   `limits` (*type:* `GoogleApi.DLP.V2.Model.GooglePrivacyDlpV2FindingLimits.t`, *default:* `nil`) - Configuration to control the number of findings returned. This is not used for data profiling. When redacting sensitive data from images, finding limits don't apply. They can cause unexpected or inconsistent results, where only some data is redacted. Don't include finding limits in RedactImage requests. Otherwise, Cloud DLP returns an error. When set within an InspectJobConfig, the specified maximum values aren't hard limits. If an inspection job reaches these limits, the job ends gradually, not abruptly. Therefore, the actual number of findings that Cloud DLP returns can be multiple times higher than these maximum values.
  *   `minLikelihood` (*type:* `String.t`, *default:* `nil`) - Only returns findings equal to or above this threshold. The default is POSSIBLE. In general, the highest likelihood setting yields the fewest findings in results and the lowest chance of a false positive. For more information, see [Match likelihood](https://cloud.google.com/sensitive-data-protection/docs/likelihood).
  *   `minLikelihoodPerInfoType` (*type:* `list(GoogleApi.DLP.V2.Model.GooglePrivacyDlpV2InfoTypeLikelihood.t)`, *default:* `nil`) - Minimum likelihood per infotype. For each infotype, a user can specify a minimum likelihood. The system only returns a finding if its likelihood is above this threshold. If this field is not set, the system uses the InspectConfig min_likelihood.
  *   `ruleSet` (*type:* `list(GoogleApi.DLP.V2.Model.GooglePrivacyDlpV2InspectionRuleSet.t)`, *default:* `nil`) - Set of rules to apply to the findings for this InspectConfig. Exclusion rules, contained in the set are executed in the end, other rules are executed in the order they are specified for each info type.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :contentOptions => list(String.t()) | nil,
          :customInfoTypes =>
            list(GoogleApi.DLP.V2.Model.GooglePrivacyDlpV2CustomInfoType.t()) | nil,
          :excludeInfoTypes => boolean() | nil,
          :includeQuote => boolean() | nil,
          :infoTypes => list(GoogleApi.DLP.V2.Model.GooglePrivacyDlpV2InfoType.t()) | nil,
          :limits => GoogleApi.DLP.V2.Model.GooglePrivacyDlpV2FindingLimits.t() | nil,
          :minLikelihood => String.t() | nil,
          :minLikelihoodPerInfoType =>
            list(GoogleApi.DLP.V2.Model.GooglePrivacyDlpV2InfoTypeLikelihood.t()) | nil,
          :ruleSet => list(GoogleApi.DLP.V2.Model.GooglePrivacyDlpV2InspectionRuleSet.t()) | nil
        }

  field(:contentOptions, type: :list)

  field(:customInfoTypes, as: GoogleApi.DLP.V2.Model.GooglePrivacyDlpV2CustomInfoType, type: :list)

  field(:excludeInfoTypes)
  field(:includeQuote)
  field(:infoTypes, as: GoogleApi.DLP.V2.Model.GooglePrivacyDlpV2InfoType, type: :list)
  field(:limits, as: GoogleApi.DLP.V2.Model.GooglePrivacyDlpV2FindingLimits)
  field(:minLikelihood)

  field(:minLikelihoodPerInfoType,
    as: GoogleApi.DLP.V2.Model.GooglePrivacyDlpV2InfoTypeLikelihood,
    type: :list
  )

  field(:ruleSet, as: GoogleApi.DLP.V2.Model.GooglePrivacyDlpV2InspectionRuleSet, type: :list)
end

defimpl Poison.Decoder, for: GoogleApi.DLP.V2.Model.GooglePrivacyDlpV2InspectConfig do
  def decode(value, options) do
    GoogleApi.DLP.V2.Model.GooglePrivacyDlpV2InspectConfig.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.DLP.V2.Model.GooglePrivacyDlpV2InspectConfig do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
