{-# 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.CreateTracker
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a tracker resource in your AWS account, which lets you retrieve
-- current and historical location of devices.
module Amazonka.Location.CreateTracker
  ( -- * Creating a Request
    CreateTracker (..),
    newCreateTracker,

    -- * Request Lenses
    createTracker_description,
    createTracker_kmsKeyId,
    createTracker_positionFiltering,
    createTracker_pricingPlan,
    createTracker_pricingPlanDataSource,
    createTracker_tags,
    createTracker_trackerName,

    -- * Destructuring the Response
    CreateTrackerResponse (..),
    newCreateTrackerResponse,

    -- * Response Lenses
    createTrackerResponse_httpStatus,
    createTrackerResponse_createTime,
    createTrackerResponse_trackerArn,
    createTrackerResponse_trackerName,
  )
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:/ 'newCreateTracker' smart constructor.
data CreateTracker = CreateTracker'
  { -- | An optional description for the tracker resource.
    CreateTracker -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | A key identifier for an
    -- <https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html AWS KMS customer managed key>.
    -- Enter a key ID, key ARN, alias name, or alias ARN.
    CreateTracker -> Maybe Text
kmsKeyId :: Prelude.Maybe Prelude.Text,
    -- | Specifies the position filtering for the tracker resource.
    --
    -- Valid values:
    --
    -- -   @TimeBased@ - Location updates are evaluated against linked geofence
    --     collections, but not every location update is stored. If your update
    --     frequency is more often than 30 seconds, only one update per 30
    --     seconds is stored for each unique device ID.
    --
    -- -   @DistanceBased@ - If the device has moved less than 30 m (98.4 ft),
    --     location updates are ignored. Location updates within this area are
    --     neither evaluated against linked geofence collections, nor stored.
    --     This helps control costs by reducing the number of geofence
    --     evaluations and historical device positions to paginate through.
    --     Distance-based filtering can also reduce the effects of GPS noise
    --     when displaying device trajectories on a map.
    --
    -- -   @AccuracyBased@ - If the device has moved less than the measured
    --     accuracy, location updates are ignored. For example, if two
    --     consecutive updates from a device have a horizontal accuracy of 5 m
    --     and 10 m, the second update is ignored if the device has moved less
    --     than 15 m. Ignored location updates are neither evaluated against
    --     linked geofence collections, nor stored. This can reduce the effects
    --     of GPS noise when displaying device trajectories on a map, and can
    --     help control your costs by reducing the number of geofence
    --     evaluations.
    --
    -- This field is optional. If not specified, the default value is
    -- @TimeBased@.
    CreateTracker -> Maybe PositionFiltering
positionFiltering :: Prelude.Maybe PositionFiltering,
    -- | No longer used. If included, the only allowed value is
    -- @RequestBasedUsage@.
    CreateTracker -> Maybe PricingPlan
pricingPlan :: Prelude.Maybe PricingPlan,
    -- | This parameter is no longer used.
    CreateTracker -> Maybe Text
pricingPlanDataSource :: Prelude.Maybe Prelude.Text,
    -- | Applies one or more tags to the tracker resource. A tag is a key-value
    -- pair helps manage, identify, search, and filter your resources by
    -- labelling them.
    --
    -- Format: @\"key\" : \"value\"@
    --
    -- Restrictions:
    --
    -- -   Maximum 50 tags per resource
    --
    -- -   Each resource tag must be unique with a maximum of one value.
    --
    -- -   Maximum key length: 128 Unicode characters in UTF-8
    --
    -- -   Maximum value length: 256 Unicode characters in UTF-8
    --
    -- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
    --     characters: + - = . _ : \/ \@.
    --
    -- -   Cannot use \"aws:\" as a prefix for a key.
    CreateTracker -> Maybe (HashMap Text Text)
tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | The name for the tracker resource.
    --
    -- Requirements:
    --
    -- -   Contain only alphanumeric characters (A-Z, a-z, 0-9) , hyphens (-),
    --     periods (.), and underscores (_).
    --
    -- -   Must be a unique tracker resource name.
    --
    -- -   No spaces allowed. For example, @ExampleTracker@.
    CreateTracker -> Text
trackerName :: Prelude.Text
  }
  deriving (CreateTracker -> CreateTracker -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateTracker -> CreateTracker -> Bool
$c/= :: CreateTracker -> CreateTracker -> Bool
== :: CreateTracker -> CreateTracker -> Bool
$c== :: CreateTracker -> CreateTracker -> Bool
Prelude.Eq, ReadPrec [CreateTracker]
ReadPrec CreateTracker
Int -> ReadS CreateTracker
ReadS [CreateTracker]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateTracker]
$creadListPrec :: ReadPrec [CreateTracker]
readPrec :: ReadPrec CreateTracker
$creadPrec :: ReadPrec CreateTracker
readList :: ReadS [CreateTracker]
$creadList :: ReadS [CreateTracker]
readsPrec :: Int -> ReadS CreateTracker
$creadsPrec :: Int -> ReadS CreateTracker
Prelude.Read, Int -> CreateTracker -> ShowS
[CreateTracker] -> ShowS
CreateTracker -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateTracker] -> ShowS
$cshowList :: [CreateTracker] -> ShowS
show :: CreateTracker -> String
$cshow :: CreateTracker -> String
showsPrec :: Int -> CreateTracker -> ShowS
$cshowsPrec :: Int -> CreateTracker -> ShowS
Prelude.Show, forall x. Rep CreateTracker x -> CreateTracker
forall x. CreateTracker -> Rep CreateTracker x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateTracker x -> CreateTracker
$cfrom :: forall x. CreateTracker -> Rep CreateTracker x
Prelude.Generic)

-- |
-- Create a value of 'CreateTracker' 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:
--
-- 'description', 'createTracker_description' - An optional description for the tracker resource.
--
-- 'kmsKeyId', 'createTracker_kmsKeyId' - A key identifier for an
-- <https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html AWS KMS customer managed key>.
-- Enter a key ID, key ARN, alias name, or alias ARN.
--
-- 'positionFiltering', 'createTracker_positionFiltering' - Specifies the position filtering for the tracker resource.
--
-- Valid values:
--
-- -   @TimeBased@ - Location updates are evaluated against linked geofence
--     collections, but not every location update is stored. If your update
--     frequency is more often than 30 seconds, only one update per 30
--     seconds is stored for each unique device ID.
--
-- -   @DistanceBased@ - If the device has moved less than 30 m (98.4 ft),
--     location updates are ignored. Location updates within this area are
--     neither evaluated against linked geofence collections, nor stored.
--     This helps control costs by reducing the number of geofence
--     evaluations and historical device positions to paginate through.
--     Distance-based filtering can also reduce the effects of GPS noise
--     when displaying device trajectories on a map.
--
-- -   @AccuracyBased@ - If the device has moved less than the measured
--     accuracy, location updates are ignored. For example, if two
--     consecutive updates from a device have a horizontal accuracy of 5 m
--     and 10 m, the second update is ignored if the device has moved less
--     than 15 m. Ignored location updates are neither evaluated against
--     linked geofence collections, nor stored. This can reduce the effects
--     of GPS noise when displaying device trajectories on a map, and can
--     help control your costs by reducing the number of geofence
--     evaluations.
--
-- This field is optional. If not specified, the default value is
-- @TimeBased@.
--
-- 'pricingPlan', 'createTracker_pricingPlan' - No longer used. If included, the only allowed value is
-- @RequestBasedUsage@.
--
-- 'pricingPlanDataSource', 'createTracker_pricingPlanDataSource' - This parameter is no longer used.
--
-- 'tags', 'createTracker_tags' - Applies one or more tags to the tracker resource. A tag is a key-value
-- pair helps manage, identify, search, and filter your resources by
-- labelling them.
--
-- Format: @\"key\" : \"value\"@
--
-- Restrictions:
--
-- -   Maximum 50 tags per resource
--
-- -   Each resource tag must be unique with a maximum of one value.
--
-- -   Maximum key length: 128 Unicode characters in UTF-8
--
-- -   Maximum value length: 256 Unicode characters in UTF-8
--
-- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
--     characters: + - = . _ : \/ \@.
--
-- -   Cannot use \"aws:\" as a prefix for a key.
--
-- 'trackerName', 'createTracker_trackerName' - The name for the tracker resource.
--
-- Requirements:
--
-- -   Contain only alphanumeric characters (A-Z, a-z, 0-9) , hyphens (-),
--     periods (.), and underscores (_).
--
-- -   Must be a unique tracker resource name.
--
-- -   No spaces allowed. For example, @ExampleTracker@.
newCreateTracker ::
  -- | 'trackerName'
  Prelude.Text ->
  CreateTracker
newCreateTracker :: Text -> CreateTracker
newCreateTracker Text
pTrackerName_ =
  CreateTracker'
    { $sel:description:CreateTracker' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:kmsKeyId:CreateTracker' :: Maybe Text
kmsKeyId = forall a. Maybe a
Prelude.Nothing,
      $sel:positionFiltering:CreateTracker' :: Maybe PositionFiltering
positionFiltering = forall a. Maybe a
Prelude.Nothing,
      $sel:pricingPlan:CreateTracker' :: Maybe PricingPlan
pricingPlan = forall a. Maybe a
Prelude.Nothing,
      $sel:pricingPlanDataSource:CreateTracker' :: Maybe Text
pricingPlanDataSource = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:CreateTracker' :: Maybe (HashMap Text Text)
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:trackerName:CreateTracker' :: Text
trackerName = Text
pTrackerName_
    }

-- | An optional description for the tracker resource.
createTracker_description :: Lens.Lens' CreateTracker (Prelude.Maybe Prelude.Text)
createTracker_description :: Lens' CreateTracker (Maybe Text)
createTracker_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTracker' {Maybe Text
description :: Maybe Text
$sel:description:CreateTracker' :: CreateTracker -> Maybe Text
description} -> Maybe Text
description) (\s :: CreateTracker
s@CreateTracker' {} Maybe Text
a -> CreateTracker
s {$sel:description:CreateTracker' :: Maybe Text
description = Maybe Text
a} :: CreateTracker)

-- | A key identifier for an
-- <https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html AWS KMS customer managed key>.
-- Enter a key ID, key ARN, alias name, or alias ARN.
createTracker_kmsKeyId :: Lens.Lens' CreateTracker (Prelude.Maybe Prelude.Text)
createTracker_kmsKeyId :: Lens' CreateTracker (Maybe Text)
createTracker_kmsKeyId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTracker' {Maybe Text
kmsKeyId :: Maybe Text
$sel:kmsKeyId:CreateTracker' :: CreateTracker -> Maybe Text
kmsKeyId} -> Maybe Text
kmsKeyId) (\s :: CreateTracker
s@CreateTracker' {} Maybe Text
a -> CreateTracker
s {$sel:kmsKeyId:CreateTracker' :: Maybe Text
kmsKeyId = Maybe Text
a} :: CreateTracker)

-- | Specifies the position filtering for the tracker resource.
--
-- Valid values:
--
-- -   @TimeBased@ - Location updates are evaluated against linked geofence
--     collections, but not every location update is stored. If your update
--     frequency is more often than 30 seconds, only one update per 30
--     seconds is stored for each unique device ID.
--
-- -   @DistanceBased@ - If the device has moved less than 30 m (98.4 ft),
--     location updates are ignored. Location updates within this area are
--     neither evaluated against linked geofence collections, nor stored.
--     This helps control costs by reducing the number of geofence
--     evaluations and historical device positions to paginate through.
--     Distance-based filtering can also reduce the effects of GPS noise
--     when displaying device trajectories on a map.
--
-- -   @AccuracyBased@ - If the device has moved less than the measured
--     accuracy, location updates are ignored. For example, if two
--     consecutive updates from a device have a horizontal accuracy of 5 m
--     and 10 m, the second update is ignored if the device has moved less
--     than 15 m. Ignored location updates are neither evaluated against
--     linked geofence collections, nor stored. This can reduce the effects
--     of GPS noise when displaying device trajectories on a map, and can
--     help control your costs by reducing the number of geofence
--     evaluations.
--
-- This field is optional. If not specified, the default value is
-- @TimeBased@.
createTracker_positionFiltering :: Lens.Lens' CreateTracker (Prelude.Maybe PositionFiltering)
createTracker_positionFiltering :: Lens' CreateTracker (Maybe PositionFiltering)
createTracker_positionFiltering = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTracker' {Maybe PositionFiltering
positionFiltering :: Maybe PositionFiltering
$sel:positionFiltering:CreateTracker' :: CreateTracker -> Maybe PositionFiltering
positionFiltering} -> Maybe PositionFiltering
positionFiltering) (\s :: CreateTracker
s@CreateTracker' {} Maybe PositionFiltering
a -> CreateTracker
s {$sel:positionFiltering:CreateTracker' :: Maybe PositionFiltering
positionFiltering = Maybe PositionFiltering
a} :: CreateTracker)

-- | No longer used. If included, the only allowed value is
-- @RequestBasedUsage@.
createTracker_pricingPlan :: Lens.Lens' CreateTracker (Prelude.Maybe PricingPlan)
createTracker_pricingPlan :: Lens' CreateTracker (Maybe PricingPlan)
createTracker_pricingPlan = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTracker' {Maybe PricingPlan
pricingPlan :: Maybe PricingPlan
$sel:pricingPlan:CreateTracker' :: CreateTracker -> Maybe PricingPlan
pricingPlan} -> Maybe PricingPlan
pricingPlan) (\s :: CreateTracker
s@CreateTracker' {} Maybe PricingPlan
a -> CreateTracker
s {$sel:pricingPlan:CreateTracker' :: Maybe PricingPlan
pricingPlan = Maybe PricingPlan
a} :: CreateTracker)

-- | This parameter is no longer used.
createTracker_pricingPlanDataSource :: Lens.Lens' CreateTracker (Prelude.Maybe Prelude.Text)
createTracker_pricingPlanDataSource :: Lens' CreateTracker (Maybe Text)
createTracker_pricingPlanDataSource = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTracker' {Maybe Text
pricingPlanDataSource :: Maybe Text
$sel:pricingPlanDataSource:CreateTracker' :: CreateTracker -> Maybe Text
pricingPlanDataSource} -> Maybe Text
pricingPlanDataSource) (\s :: CreateTracker
s@CreateTracker' {} Maybe Text
a -> CreateTracker
s {$sel:pricingPlanDataSource:CreateTracker' :: Maybe Text
pricingPlanDataSource = Maybe Text
a} :: CreateTracker)

-- | Applies one or more tags to the tracker resource. A tag is a key-value
-- pair helps manage, identify, search, and filter your resources by
-- labelling them.
--
-- Format: @\"key\" : \"value\"@
--
-- Restrictions:
--
-- -   Maximum 50 tags per resource
--
-- -   Each resource tag must be unique with a maximum of one value.
--
-- -   Maximum key length: 128 Unicode characters in UTF-8
--
-- -   Maximum value length: 256 Unicode characters in UTF-8
--
-- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
--     characters: + - = . _ : \/ \@.
--
-- -   Cannot use \"aws:\" as a prefix for a key.
createTracker_tags :: Lens.Lens' CreateTracker (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
createTracker_tags :: Lens' CreateTracker (Maybe (HashMap Text Text))
createTracker_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTracker' {Maybe (HashMap Text Text)
tags :: Maybe (HashMap Text Text)
$sel:tags:CreateTracker' :: CreateTracker -> Maybe (HashMap Text Text)
tags} -> Maybe (HashMap Text Text)
tags) (\s :: CreateTracker
s@CreateTracker' {} Maybe (HashMap Text Text)
a -> CreateTracker
s {$sel:tags:CreateTracker' :: Maybe (HashMap Text Text)
tags = Maybe (HashMap Text Text)
a} :: CreateTracker) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The name for the tracker resource.
--
-- Requirements:
--
-- -   Contain only alphanumeric characters (A-Z, a-z, 0-9) , hyphens (-),
--     periods (.), and underscores (_).
--
-- -   Must be a unique tracker resource name.
--
-- -   No spaces allowed. For example, @ExampleTracker@.
createTracker_trackerName :: Lens.Lens' CreateTracker Prelude.Text
createTracker_trackerName :: Lens' CreateTracker Text
createTracker_trackerName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTracker' {Text
trackerName :: Text
$sel:trackerName:CreateTracker' :: CreateTracker -> Text
trackerName} -> Text
trackerName) (\s :: CreateTracker
s@CreateTracker' {} Text
a -> CreateTracker
s {$sel:trackerName:CreateTracker' :: Text
trackerName = Text
a} :: CreateTracker)

instance Core.AWSRequest CreateTracker where
  type
    AWSResponse CreateTracker =
      CreateTrackerResponse
  request :: (Service -> Service) -> CreateTracker -> Request CreateTracker
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy CreateTracker
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateTracker)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Int -> ISO8601 -> Text -> Text -> CreateTrackerResponse
CreateTrackerResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String a
Data..:> Key
"CreateTime")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String a
Data..:> Key
"TrackerArn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String a
Data..:> Key
"TrackerName")
      )

instance Prelude.Hashable CreateTracker where
  hashWithSalt :: Int -> CreateTracker -> Int
hashWithSalt Int
_salt CreateTracker' {Maybe Text
Maybe (HashMap Text Text)
Maybe PositionFiltering
Maybe PricingPlan
Text
trackerName :: Text
tags :: Maybe (HashMap Text Text)
pricingPlanDataSource :: Maybe Text
pricingPlan :: Maybe PricingPlan
positionFiltering :: Maybe PositionFiltering
kmsKeyId :: Maybe Text
description :: Maybe Text
$sel:trackerName:CreateTracker' :: CreateTracker -> Text
$sel:tags:CreateTracker' :: CreateTracker -> Maybe (HashMap Text Text)
$sel:pricingPlanDataSource:CreateTracker' :: CreateTracker -> Maybe Text
$sel:pricingPlan:CreateTracker' :: CreateTracker -> Maybe PricingPlan
$sel:positionFiltering:CreateTracker' :: CreateTracker -> Maybe PositionFiltering
$sel:kmsKeyId:CreateTracker' :: CreateTracker -> Maybe Text
$sel:description:CreateTracker' :: CreateTracker -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
kmsKeyId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PositionFiltering
positionFiltering
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PricingPlan
pricingPlan
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
pricingPlanDataSource
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text Text)
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
trackerName

instance Prelude.NFData CreateTracker where
  rnf :: CreateTracker -> ()
rnf CreateTracker' {Maybe Text
Maybe (HashMap Text Text)
Maybe PositionFiltering
Maybe PricingPlan
Text
trackerName :: Text
tags :: Maybe (HashMap Text Text)
pricingPlanDataSource :: Maybe Text
pricingPlan :: Maybe PricingPlan
positionFiltering :: Maybe PositionFiltering
kmsKeyId :: Maybe Text
description :: Maybe Text
$sel:trackerName:CreateTracker' :: CreateTracker -> Text
$sel:tags:CreateTracker' :: CreateTracker -> Maybe (HashMap Text Text)
$sel:pricingPlanDataSource:CreateTracker' :: CreateTracker -> Maybe Text
$sel:pricingPlan:CreateTracker' :: CreateTracker -> Maybe PricingPlan
$sel:positionFiltering:CreateTracker' :: CreateTracker -> Maybe PositionFiltering
$sel:kmsKeyId:CreateTracker' :: CreateTracker -> Maybe Text
$sel:description:CreateTracker' :: CreateTracker -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
kmsKeyId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PositionFiltering
positionFiltering
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PricingPlan
pricingPlan
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
pricingPlanDataSource
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text Text)
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
trackerName

instance Data.ToHeaders CreateTracker where
  toHeaders :: CreateTracker -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON CreateTracker where
  toJSON :: CreateTracker -> Value
toJSON CreateTracker' {Maybe Text
Maybe (HashMap Text Text)
Maybe PositionFiltering
Maybe PricingPlan
Text
trackerName :: Text
tags :: Maybe (HashMap Text Text)
pricingPlanDataSource :: Maybe Text
pricingPlan :: Maybe PricingPlan
positionFiltering :: Maybe PositionFiltering
kmsKeyId :: Maybe Text
description :: Maybe Text
$sel:trackerName:CreateTracker' :: CreateTracker -> Text
$sel:tags:CreateTracker' :: CreateTracker -> Maybe (HashMap Text Text)
$sel:pricingPlanDataSource:CreateTracker' :: CreateTracker -> Maybe Text
$sel:pricingPlan:CreateTracker' :: CreateTracker -> Maybe PricingPlan
$sel:positionFiltering:CreateTracker' :: CreateTracker -> Maybe PositionFiltering
$sel:kmsKeyId:CreateTracker' :: CreateTracker -> Maybe Text
$sel:description:CreateTracker' :: CreateTracker -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"Description" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
description,
            (Key
"KmsKeyId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
kmsKeyId,
            (Key
"PositionFiltering" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe PositionFiltering
positionFiltering,
            (Key
"PricingPlan" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe PricingPlan
pricingPlan,
            (Key
"PricingPlanDataSource" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
pricingPlanDataSource,
            (Key
"Tags" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (HashMap Text Text)
tags,
            forall a. a -> Maybe a
Prelude.Just (Key
"TrackerName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
trackerName)
          ]
      )

instance Data.ToPath CreateTracker where
  toPath :: CreateTracker -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/tracking/v0/trackers"

instance Data.ToQuery CreateTracker where
  toQuery :: CreateTracker -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newCreateTrackerResponse' smart constructor.
data CreateTrackerResponse = CreateTrackerResponse'
  { -- | The response's http status code.
    CreateTrackerResponse -> Int
httpStatus :: Prelude.Int,
    -- | The timestamp for when the tracker resource was created in
    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
    CreateTrackerResponse -> ISO8601
createTime :: Data.ISO8601,
    -- | The Amazon Resource Name (ARN) for the tracker resource. Used when you
    -- need to specify a resource across all AWS.
    --
    -- -   Format example:
    --     @arn:aws:geo:region:account-id:tracker\/ExampleTracker@
    CreateTrackerResponse -> Text
trackerArn :: Prelude.Text,
    -- | The name of the tracker resource.
    CreateTrackerResponse -> Text
trackerName :: Prelude.Text
  }
  deriving (CreateTrackerResponse -> CreateTrackerResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateTrackerResponse -> CreateTrackerResponse -> Bool
$c/= :: CreateTrackerResponse -> CreateTrackerResponse -> Bool
== :: CreateTrackerResponse -> CreateTrackerResponse -> Bool
$c== :: CreateTrackerResponse -> CreateTrackerResponse -> Bool
Prelude.Eq, ReadPrec [CreateTrackerResponse]
ReadPrec CreateTrackerResponse
Int -> ReadS CreateTrackerResponse
ReadS [CreateTrackerResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateTrackerResponse]
$creadListPrec :: ReadPrec [CreateTrackerResponse]
readPrec :: ReadPrec CreateTrackerResponse
$creadPrec :: ReadPrec CreateTrackerResponse
readList :: ReadS [CreateTrackerResponse]
$creadList :: ReadS [CreateTrackerResponse]
readsPrec :: Int -> ReadS CreateTrackerResponse
$creadsPrec :: Int -> ReadS CreateTrackerResponse
Prelude.Read, Int -> CreateTrackerResponse -> ShowS
[CreateTrackerResponse] -> ShowS
CreateTrackerResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateTrackerResponse] -> ShowS
$cshowList :: [CreateTrackerResponse] -> ShowS
show :: CreateTrackerResponse -> String
$cshow :: CreateTrackerResponse -> String
showsPrec :: Int -> CreateTrackerResponse -> ShowS
$cshowsPrec :: Int -> CreateTrackerResponse -> ShowS
Prelude.Show, forall x. Rep CreateTrackerResponse x -> CreateTrackerResponse
forall x. CreateTrackerResponse -> Rep CreateTrackerResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateTrackerResponse x -> CreateTrackerResponse
$cfrom :: forall x. CreateTrackerResponse -> Rep CreateTrackerResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateTrackerResponse' 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', 'createTrackerResponse_httpStatus' - The response's http status code.
--
-- 'createTime', 'createTrackerResponse_createTime' - The timestamp for when the tracker resource was created in
-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
--
-- 'trackerArn', 'createTrackerResponse_trackerArn' - The Amazon Resource Name (ARN) for the tracker resource. Used when you
-- need to specify a resource across all AWS.
--
-- -   Format example:
--     @arn:aws:geo:region:account-id:tracker\/ExampleTracker@
--
-- 'trackerName', 'createTrackerResponse_trackerName' - The name of the tracker resource.
newCreateTrackerResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'createTime'
  Prelude.UTCTime ->
  -- | 'trackerArn'
  Prelude.Text ->
  -- | 'trackerName'
  Prelude.Text ->
  CreateTrackerResponse
newCreateTrackerResponse :: Int -> UTCTime -> Text -> Text -> CreateTrackerResponse
newCreateTrackerResponse
  Int
pHttpStatus_
  UTCTime
pCreateTime_
  Text
pTrackerArn_
  Text
pTrackerName_ =
    CreateTrackerResponse'
      { $sel:httpStatus:CreateTrackerResponse' :: Int
httpStatus = Int
pHttpStatus_,
        $sel:createTime:CreateTrackerResponse' :: ISO8601
createTime = forall (a :: Format). Iso' (Time a) UTCTime
Data._Time forall t b. AReview t b -> b -> t
Lens.# UTCTime
pCreateTime_,
        $sel:trackerArn:CreateTrackerResponse' :: Text
trackerArn = Text
pTrackerArn_,
        $sel:trackerName:CreateTrackerResponse' :: Text
trackerName = Text
pTrackerName_
      }

-- | The response's http status code.
createTrackerResponse_httpStatus :: Lens.Lens' CreateTrackerResponse Prelude.Int
createTrackerResponse_httpStatus :: Lens' CreateTrackerResponse Int
createTrackerResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTrackerResponse' {Int
httpStatus :: Int
$sel:httpStatus:CreateTrackerResponse' :: CreateTrackerResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: CreateTrackerResponse
s@CreateTrackerResponse' {} Int
a -> CreateTrackerResponse
s {$sel:httpStatus:CreateTrackerResponse' :: Int
httpStatus = Int
a} :: CreateTrackerResponse)

-- | The timestamp for when the tracker resource was created in
-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
createTrackerResponse_createTime :: Lens.Lens' CreateTrackerResponse Prelude.UTCTime
createTrackerResponse_createTime :: Lens' CreateTrackerResponse UTCTime
createTrackerResponse_createTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTrackerResponse' {ISO8601
createTime :: ISO8601
$sel:createTime:CreateTrackerResponse' :: CreateTrackerResponse -> ISO8601
createTime} -> ISO8601
createTime) (\s :: CreateTrackerResponse
s@CreateTrackerResponse' {} ISO8601
a -> CreateTrackerResponse
s {$sel:createTime:CreateTrackerResponse' :: ISO8601
createTime = ISO8601
a} :: CreateTrackerResponse) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The Amazon Resource Name (ARN) for the tracker resource. Used when you
-- need to specify a resource across all AWS.
--
-- -   Format example:
--     @arn:aws:geo:region:account-id:tracker\/ExampleTracker@
createTrackerResponse_trackerArn :: Lens.Lens' CreateTrackerResponse Prelude.Text
createTrackerResponse_trackerArn :: Lens' CreateTrackerResponse Text
createTrackerResponse_trackerArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTrackerResponse' {Text
trackerArn :: Text
$sel:trackerArn:CreateTrackerResponse' :: CreateTrackerResponse -> Text
trackerArn} -> Text
trackerArn) (\s :: CreateTrackerResponse
s@CreateTrackerResponse' {} Text
a -> CreateTrackerResponse
s {$sel:trackerArn:CreateTrackerResponse' :: Text
trackerArn = Text
a} :: CreateTrackerResponse)

-- | The name of the tracker resource.
createTrackerResponse_trackerName :: Lens.Lens' CreateTrackerResponse Prelude.Text
createTrackerResponse_trackerName :: Lens' CreateTrackerResponse Text
createTrackerResponse_trackerName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTrackerResponse' {Text
trackerName :: Text
$sel:trackerName:CreateTrackerResponse' :: CreateTrackerResponse -> Text
trackerName} -> Text
trackerName) (\s :: CreateTrackerResponse
s@CreateTrackerResponse' {} Text
a -> CreateTrackerResponse
s {$sel:trackerName:CreateTrackerResponse' :: Text
trackerName = Text
a} :: CreateTrackerResponse)

instance Prelude.NFData CreateTrackerResponse where
  rnf :: CreateTrackerResponse -> ()
rnf CreateTrackerResponse' {Int
Text
ISO8601
trackerName :: Text
trackerArn :: Text
createTime :: ISO8601
httpStatus :: Int
$sel:trackerName:CreateTrackerResponse' :: CreateTrackerResponse -> Text
$sel:trackerArn:CreateTrackerResponse' :: CreateTrackerResponse -> Text
$sel:createTime:CreateTrackerResponse' :: CreateTrackerResponse -> ISO8601
$sel:httpStatus:CreateTrackerResponse' :: CreateTrackerResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ISO8601
createTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
trackerArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
trackerName