packages feed

amazonka-location-2.0: gen/Amazonka/Location/PutGeofence.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.Location.PutGeofence
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Stores a geofence geometry in a given geofence collection, or updates
-- the geometry of an existing geofence if a geofence ID is included in the
-- request.
module Amazonka.Location.PutGeofence
  ( -- * Creating a Request
    PutGeofence (..),
    newPutGeofence,

    -- * Request Lenses
    putGeofence_collectionName,
    putGeofence_geofenceId,
    putGeofence_geometry,

    -- * Destructuring the Response
    PutGeofenceResponse (..),
    newPutGeofenceResponse,

    -- * Response Lenses
    putGeofenceResponse_httpStatus,
    putGeofenceResponse_createTime,
    putGeofenceResponse_geofenceId,
    putGeofenceResponse_updateTime,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Location.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newPutGeofence' smart constructor.
data PutGeofence = PutGeofence'
  { -- | The geofence collection to store the geofence in.
    collectionName :: Prelude.Text,
    -- | An identifier for the geofence. For example, @ExampleGeofence-1@.
    geofenceId :: Prelude.Text,
    -- | Contains the details to specify the position of the geofence. Can be
    -- either a polygon or a circle. Including both will return a validation
    -- error.
    --
    -- Each
    -- <https://docs.aws.amazon.com/location-geofences/latest/APIReference/API_GeofenceGeometry.html geofence polygon>
    -- can have a maximum of 1,000 vertices.
    geometry :: GeofenceGeometry
  }
  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'PutGeofence' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'collectionName', 'putGeofence_collectionName' - The geofence collection to store the geofence in.
--
-- 'geofenceId', 'putGeofence_geofenceId' - An identifier for the geofence. For example, @ExampleGeofence-1@.
--
-- 'geometry', 'putGeofence_geometry' - Contains the details to specify the position of the geofence. Can be
-- either a polygon or a circle. Including both will return a validation
-- error.
--
-- Each
-- <https://docs.aws.amazon.com/location-geofences/latest/APIReference/API_GeofenceGeometry.html geofence polygon>
-- can have a maximum of 1,000 vertices.
newPutGeofence ::
  -- | 'collectionName'
  Prelude.Text ->
  -- | 'geofenceId'
  Prelude.Text ->
  -- | 'geometry'
  GeofenceGeometry ->
  PutGeofence
newPutGeofence
  pCollectionName_
  pGeofenceId_
  pGeometry_ =
    PutGeofence'
      { collectionName = pCollectionName_,
        geofenceId = pGeofenceId_,
        geometry = pGeometry_
      }

-- | The geofence collection to store the geofence in.
putGeofence_collectionName :: Lens.Lens' PutGeofence Prelude.Text
putGeofence_collectionName = Lens.lens (\PutGeofence' {collectionName} -> collectionName) (\s@PutGeofence' {} a -> s {collectionName = a} :: PutGeofence)

-- | An identifier for the geofence. For example, @ExampleGeofence-1@.
putGeofence_geofenceId :: Lens.Lens' PutGeofence Prelude.Text
putGeofence_geofenceId = Lens.lens (\PutGeofence' {geofenceId} -> geofenceId) (\s@PutGeofence' {} a -> s {geofenceId = a} :: PutGeofence)

-- | Contains the details to specify the position of the geofence. Can be
-- either a polygon or a circle. Including both will return a validation
-- error.
--
-- Each
-- <https://docs.aws.amazon.com/location-geofences/latest/APIReference/API_GeofenceGeometry.html geofence polygon>
-- can have a maximum of 1,000 vertices.
putGeofence_geometry :: Lens.Lens' PutGeofence GeofenceGeometry
putGeofence_geometry = Lens.lens (\PutGeofence' {geometry} -> geometry) (\s@PutGeofence' {} a -> s {geometry = a} :: PutGeofence)

instance Core.AWSRequest PutGeofence where
  type AWSResponse PutGeofence = PutGeofenceResponse
  request overrides =
    Request.putJSON (overrides defaultService)
  response =
    Response.receiveJSON
      ( \s h x ->
          PutGeofenceResponse'
            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
            Prelude.<*> (x Data..:> "CreateTime")
            Prelude.<*> (x Data..:> "GeofenceId")
            Prelude.<*> (x Data..:> "UpdateTime")
      )

instance Prelude.Hashable PutGeofence where
  hashWithSalt _salt PutGeofence' {..} =
    _salt
      `Prelude.hashWithSalt` collectionName
      `Prelude.hashWithSalt` geofenceId
      `Prelude.hashWithSalt` geometry

instance Prelude.NFData PutGeofence where
  rnf PutGeofence' {..} =
    Prelude.rnf collectionName
      `Prelude.seq` Prelude.rnf geofenceId
      `Prelude.seq` Prelude.rnf geometry

instance Data.ToHeaders PutGeofence where
  toHeaders =
    Prelude.const
      ( Prelude.mconcat
          [ "Content-Type"
              Data.=# ( "application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON PutGeofence where
  toJSON PutGeofence' {..} =
    Data.object
      ( Prelude.catMaybes
          [Prelude.Just ("Geometry" Data..= geometry)]
      )

instance Data.ToPath PutGeofence where
  toPath PutGeofence' {..} =
    Prelude.mconcat
      [ "/geofencing/v0/collections/",
        Data.toBS collectionName,
        "/geofences/",
        Data.toBS geofenceId
      ]

instance Data.ToQuery PutGeofence where
  toQuery = Prelude.const Prelude.mempty

-- | /See:/ 'newPutGeofenceResponse' smart constructor.
data PutGeofenceResponse = PutGeofenceResponse'
  { -- | The response's http status code.
    httpStatus :: Prelude.Int,
    -- | The timestamp for when the geofence was created in
    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@
    createTime :: Data.ISO8601,
    -- | The geofence identifier entered in the request.
    geofenceId :: Prelude.Text,
    -- | The timestamp for when the geofence was last updated in
    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@
    updateTime :: Data.ISO8601
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'PutGeofenceResponse' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'httpStatus', 'putGeofenceResponse_httpStatus' - The response's http status code.
--
-- 'createTime', 'putGeofenceResponse_createTime' - The timestamp for when the geofence was created in
-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
--
-- 'geofenceId', 'putGeofenceResponse_geofenceId' - The geofence identifier entered in the request.
--
-- 'updateTime', 'putGeofenceResponse_updateTime' - The timestamp for when the geofence was last updated in
-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
newPutGeofenceResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'createTime'
  Prelude.UTCTime ->
  -- | 'geofenceId'
  Prelude.Text ->
  -- | 'updateTime'
  Prelude.UTCTime ->
  PutGeofenceResponse
newPutGeofenceResponse
  pHttpStatus_
  pCreateTime_
  pGeofenceId_
  pUpdateTime_ =
    PutGeofenceResponse'
      { httpStatus = pHttpStatus_,
        createTime = Data._Time Lens.# pCreateTime_,
        geofenceId = pGeofenceId_,
        updateTime = Data._Time Lens.# pUpdateTime_
      }

-- | The response's http status code.
putGeofenceResponse_httpStatus :: Lens.Lens' PutGeofenceResponse Prelude.Int
putGeofenceResponse_httpStatus = Lens.lens (\PutGeofenceResponse' {httpStatus} -> httpStatus) (\s@PutGeofenceResponse' {} a -> s {httpStatus = a} :: PutGeofenceResponse)

-- | The timestamp for when the geofence was created in
-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
putGeofenceResponse_createTime :: Lens.Lens' PutGeofenceResponse Prelude.UTCTime
putGeofenceResponse_createTime = Lens.lens (\PutGeofenceResponse' {createTime} -> createTime) (\s@PutGeofenceResponse' {} a -> s {createTime = a} :: PutGeofenceResponse) Prelude.. Data._Time

-- | The geofence identifier entered in the request.
putGeofenceResponse_geofenceId :: Lens.Lens' PutGeofenceResponse Prelude.Text
putGeofenceResponse_geofenceId = Lens.lens (\PutGeofenceResponse' {geofenceId} -> geofenceId) (\s@PutGeofenceResponse' {} a -> s {geofenceId = a} :: PutGeofenceResponse)

-- | The timestamp for when the geofence was last updated in
-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
putGeofenceResponse_updateTime :: Lens.Lens' PutGeofenceResponse Prelude.UTCTime
putGeofenceResponse_updateTime = Lens.lens (\PutGeofenceResponse' {updateTime} -> updateTime) (\s@PutGeofenceResponse' {} a -> s {updateTime = a} :: PutGeofenceResponse) Prelude.. Data._Time

instance Prelude.NFData PutGeofenceResponse where
  rnf PutGeofenceResponse' {..} =
    Prelude.rnf httpStatus
      `Prelude.seq` Prelude.rnf createTime
      `Prelude.seq` Prelude.rnf geofenceId
      `Prelude.seq` Prelude.rnf updateTime