# 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.AnalyticsReporting.V4.Model.SegmentFilter do
  @moduledoc """
  SegmentFilter defines the segment to be either a simple or a sequence segment. A simple segment condition contains dimension and metric conditions to select the sessions or users. A sequence segment condition can be used to select users or sessions based on sequential conditions.

  ## Attributes

  *   `not` (*type:* `boolean()`, *default:* `nil`) - If true, match the complement of simple or sequence segment. For example, to match all visits not from "New York", we can define the segment as follows: "sessionSegment": { "segmentFilters": [{ "simpleSegment" :{ "orFiltersForSegment": [{ "segmentFilterClauses":[{ "dimensionFilter": { "dimensionName": "ga:city", "expressions": ["New York"] } }] }] }, "not": "True" }] },
  *   `sequenceSegment` (*type:* `GoogleApi.AnalyticsReporting.V4.Model.SequenceSegment.t`, *default:* `nil`) - Sequence conditions consist of one or more steps, where each step is defined by one or more dimension/metric conditions. Multiple steps can be combined with special sequence operators.
  *   `simpleSegment` (*type:* `GoogleApi.AnalyticsReporting.V4.Model.SimpleSegment.t`, *default:* `nil`) - A Simple segment conditions consist of one or more dimension/metric conditions that can be combined
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :not => boolean() | nil,
          :sequenceSegment => GoogleApi.AnalyticsReporting.V4.Model.SequenceSegment.t() | nil,
          :simpleSegment => GoogleApi.AnalyticsReporting.V4.Model.SimpleSegment.t() | nil
        }

  field(:not)
  field(:sequenceSegment, as: GoogleApi.AnalyticsReporting.V4.Model.SequenceSegment)
  field(:simpleSegment, as: GoogleApi.AnalyticsReporting.V4.Model.SimpleSegment)
end

defimpl Poison.Decoder, for: GoogleApi.AnalyticsReporting.V4.Model.SegmentFilter do
  def decode(value, options) do
    GoogleApi.AnalyticsReporting.V4.Model.SegmentFilter.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.AnalyticsReporting.V4.Model.SegmentFilter do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
