# 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.Places.V1.Model.GoogleMapsPlacesV1SearchTextRequest do
  @moduledoc """
  Request proto for SearchText. 

  ## Attributes

  *   `evOptions` (*type:* `GoogleApi.Places.V1.Model.GoogleMapsPlacesV1SearchTextRequestEVOptions.t`, *default:* `nil`) - Optional. Set the searchable EV options of a place search request.
  *   `includePureServiceAreaBusinesses` (*type:* `boolean()`, *default:* `nil`) - Optional. Include pure service area businesses if the field is set to true. Pure service area business is a business that visits or delivers to customers directly but does not serve customers at their business address. For example, businesses like cleaning services or plumbers. Those businesses do not have a physical address or location on Google Maps. Places will not return fields including `location`, `plus_code`, and other location related fields for these businesses.
  *   `includedType` (*type:* `String.t`, *default:* `nil`) - The requested place type. Full list of types supported: https://developers.google.com/maps/documentation/places/web-service/place-types. Only support one included type.
  *   `languageCode` (*type:* `String.t`, *default:* `nil`) - Place details will be displayed with the preferred language if available. If the language code is unspecified or unrecognized, place details of any language may be returned, with a preference for English if such details exist. Current list of supported languages: https://developers.google.com/maps/faq#languagesupport.
  *   `locationBias` (*type:* `GoogleApi.Places.V1.Model.GoogleMapsPlacesV1SearchTextRequestLocationBias.t`, *default:* `nil`) - The region to search. This location serves as a bias which means results around given location might be returned. Cannot be set along with location_restriction.
  *   `locationRestriction` (*type:* `GoogleApi.Places.V1.Model.GoogleMapsPlacesV1SearchTextRequestLocationRestriction.t`, *default:* `nil`) - The region to search. This location serves as a restriction which means results outside given location will not be returned. Cannot be set along with location_bias.
  *   `maxResultCount` (*type:* `integer()`, *default:* `nil`) - Deprecated: Use `page_size` instead. The maximum number of results per page that can be returned. If the number of available results is larger than `max_result_count`, a `next_page_token` is returned which can be passed to `page_token` to get the next page of results in subsequent requests. If 0 or no value is provided, a default of 20 is used. The maximum value is 20; values above 20 will be coerced to 20. Negative values will return an INVALID_ARGUMENT error. If both `max_result_count` and `page_size` are specified, `max_result_count` will be ignored.
  *   `minRating` (*type:* `float()`, *default:* `nil`) - Filter out results whose average user rating is strictly less than this limit. A valid value must be a float between 0 and 5 (inclusively) at a 0.5 cadence i.e. [0, 0.5, 1.0, ... , 5.0] inclusively. The input rating will round up to the nearest 0.5(ceiling). For instance, a rating of 0.6 will eliminate all results with a less than 1.0 rating.
  *   `openNow` (*type:* `boolean()`, *default:* `nil`) - Used to restrict the search to places that are currently open. The default is false.
  *   `pageSize` (*type:* `integer()`, *default:* `nil`) - Optional. The maximum number of results per page that can be returned. If the number of available results is larger than `page_size`, a `next_page_token` is returned which can be passed to `page_token` to get the next page of results in subsequent requests. If 0 or no value is provided, a default of 20 is used. The maximum value is 20; values above 20 will be set to 20. Negative values will return an INVALID_ARGUMENT error. If both `max_result_count` and `page_size` are specified, `max_result_count` will be ignored.
  *   `pageToken` (*type:* `String.t`, *default:* `nil`) - Optional. A page token, received from a previous TextSearch call. Provide this to retrieve the subsequent page. When paginating, all parameters other than `page_token`, `page_size`, and `max_result_count` provided to TextSearch must match the initial call that provided the page token. Otherwise an INVALID_ARGUMENT error is returned.
  *   `priceLevels` (*type:* `list(String.t)`, *default:* `nil`) - Used to restrict the search to places that are marked as certain price levels. Users can choose any combinations of price levels. Default to select all price levels.
  *   `rankPreference` (*type:* `String.t`, *default:* `nil`) - How results will be ranked in the response.
  *   `regionCode` (*type:* `String.t`, *default:* `nil`) - The Unicode country/region code (CLDR) of the location where the request is coming from. This parameter is used to display the place details, like region-specific place name, if available. The parameter can affect results based on applicable law. For more information, see https://www.unicode.org/cldr/charts/latest/supplemental/territory_language_information.html. Note that 3-digit region codes are not currently supported.
  *   `routingParameters` (*type:* `GoogleApi.Places.V1.Model.GoogleMapsPlacesV1RoutingParameters.t`, *default:* `nil`) - Optional. Additional parameters for routing to results.
  *   `searchAlongRouteParameters` (*type:* `GoogleApi.Places.V1.Model.GoogleMapsPlacesV1SearchTextRequestSearchAlongRouteParameters.t`, *default:* `nil`) - Optional. Additional parameters proto for searching along a route.
  *   `strictTypeFiltering` (*type:* `boolean()`, *default:* `nil`) - Used to set strict type filtering for included_type. If set to true, only results of the same type will be returned. Default to false.
  *   `textQuery` (*type:* `String.t`, *default:* `nil`) - Required. The text query for textual search.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :evOptions =>
            GoogleApi.Places.V1.Model.GoogleMapsPlacesV1SearchTextRequestEVOptions.t() | nil,
          :includePureServiceAreaBusinesses => boolean() | nil,
          :includedType => String.t() | nil,
          :languageCode => String.t() | nil,
          :locationBias =>
            GoogleApi.Places.V1.Model.GoogleMapsPlacesV1SearchTextRequestLocationBias.t() | nil,
          :locationRestriction =>
            GoogleApi.Places.V1.Model.GoogleMapsPlacesV1SearchTextRequestLocationRestriction.t()
            | nil,
          :maxResultCount => integer() | nil,
          :minRating => float() | nil,
          :openNow => boolean() | nil,
          :pageSize => integer() | nil,
          :pageToken => String.t() | nil,
          :priceLevels => list(String.t()) | nil,
          :rankPreference => String.t() | nil,
          :regionCode => String.t() | nil,
          :routingParameters =>
            GoogleApi.Places.V1.Model.GoogleMapsPlacesV1RoutingParameters.t() | nil,
          :searchAlongRouteParameters =>
            GoogleApi.Places.V1.Model.GoogleMapsPlacesV1SearchTextRequestSearchAlongRouteParameters.t()
            | nil,
          :strictTypeFiltering => boolean() | nil,
          :textQuery => String.t() | nil
        }

  field(:evOptions, as: GoogleApi.Places.V1.Model.GoogleMapsPlacesV1SearchTextRequestEVOptions)
  field(:includePureServiceAreaBusinesses)
  field(:includedType)
  field(:languageCode)

  field(:locationBias,
    as: GoogleApi.Places.V1.Model.GoogleMapsPlacesV1SearchTextRequestLocationBias
  )

  field(:locationRestriction,
    as: GoogleApi.Places.V1.Model.GoogleMapsPlacesV1SearchTextRequestLocationRestriction
  )

  field(:maxResultCount)
  field(:minRating)
  field(:openNow)
  field(:pageSize)
  field(:pageToken)
  field(:priceLevels, type: :list)
  field(:rankPreference)
  field(:regionCode)
  field(:routingParameters, as: GoogleApi.Places.V1.Model.GoogleMapsPlacesV1RoutingParameters)

  field(:searchAlongRouteParameters,
    as: GoogleApi.Places.V1.Model.GoogleMapsPlacesV1SearchTextRequestSearchAlongRouteParameters
  )

  field(:strictTypeFiltering)
  field(:textQuery)
end

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

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