{-# 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.GroundStation.UpdateEphemeris
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Updates an existing ephemeris
module Amazonka.GroundStation.UpdateEphemeris
  ( -- * Creating a Request
    UpdateEphemeris (..),
    newUpdateEphemeris,

    -- * Request Lenses
    updateEphemeris_name,
    updateEphemeris_priority,
    updateEphemeris_enabled,
    updateEphemeris_ephemerisId,

    -- * Destructuring the Response
    EphemerisIdResponse (..),
    newEphemerisIdResponse,

    -- * Response Lenses
    ephemerisIdResponse_ephemerisId,
  )
where

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

-- | /See:/ 'newUpdateEphemeris' smart constructor.
data UpdateEphemeris = UpdateEphemeris'
  { -- | A name string associated with the ephemeris. Used as a human-readable
    -- identifier for the ephemeris.
    UpdateEphemeris -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | Customer-provided priority score to establish the order in which
    -- overlapping ephemerides should be used.
    --
    -- The default for customer-provided ephemeris priority is 1, and higher
    -- numbers take precedence.
    --
    -- Priority must be 1 or greater
    UpdateEphemeris -> Maybe Natural
priority :: Prelude.Maybe Prelude.Natural,
    -- | Whether the ephemeris is enabled or not. Changing this value will not
    -- require the ephemeris to be re-validated.
    UpdateEphemeris -> Bool
enabled :: Prelude.Bool,
    -- | The AWS Ground Station ephemeris ID.
    UpdateEphemeris -> Text
ephemerisId :: Prelude.Text
  }
  deriving (UpdateEphemeris -> UpdateEphemeris -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateEphemeris -> UpdateEphemeris -> Bool
$c/= :: UpdateEphemeris -> UpdateEphemeris -> Bool
== :: UpdateEphemeris -> UpdateEphemeris -> Bool
$c== :: UpdateEphemeris -> UpdateEphemeris -> Bool
Prelude.Eq, ReadPrec [UpdateEphemeris]
ReadPrec UpdateEphemeris
Int -> ReadS UpdateEphemeris
ReadS [UpdateEphemeris]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateEphemeris]
$creadListPrec :: ReadPrec [UpdateEphemeris]
readPrec :: ReadPrec UpdateEphemeris
$creadPrec :: ReadPrec UpdateEphemeris
readList :: ReadS [UpdateEphemeris]
$creadList :: ReadS [UpdateEphemeris]
readsPrec :: Int -> ReadS UpdateEphemeris
$creadsPrec :: Int -> ReadS UpdateEphemeris
Prelude.Read, Int -> UpdateEphemeris -> ShowS
[UpdateEphemeris] -> ShowS
UpdateEphemeris -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateEphemeris] -> ShowS
$cshowList :: [UpdateEphemeris] -> ShowS
show :: UpdateEphemeris -> String
$cshow :: UpdateEphemeris -> String
showsPrec :: Int -> UpdateEphemeris -> ShowS
$cshowsPrec :: Int -> UpdateEphemeris -> ShowS
Prelude.Show, forall x. Rep UpdateEphemeris x -> UpdateEphemeris
forall x. UpdateEphemeris -> Rep UpdateEphemeris x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateEphemeris x -> UpdateEphemeris
$cfrom :: forall x. UpdateEphemeris -> Rep UpdateEphemeris x
Prelude.Generic)

-- |
-- Create a value of 'UpdateEphemeris' 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:
--
-- 'name', 'updateEphemeris_name' - A name string associated with the ephemeris. Used as a human-readable
-- identifier for the ephemeris.
--
-- 'priority', 'updateEphemeris_priority' - Customer-provided priority score to establish the order in which
-- overlapping ephemerides should be used.
--
-- The default for customer-provided ephemeris priority is 1, and higher
-- numbers take precedence.
--
-- Priority must be 1 or greater
--
-- 'enabled', 'updateEphemeris_enabled' - Whether the ephemeris is enabled or not. Changing this value will not
-- require the ephemeris to be re-validated.
--
-- 'ephemerisId', 'updateEphemeris_ephemerisId' - The AWS Ground Station ephemeris ID.
newUpdateEphemeris ::
  -- | 'enabled'
  Prelude.Bool ->
  -- | 'ephemerisId'
  Prelude.Text ->
  UpdateEphemeris
newUpdateEphemeris :: Bool -> Text -> UpdateEphemeris
newUpdateEphemeris Bool
pEnabled_ Text
pEphemerisId_ =
  UpdateEphemeris'
    { $sel:name:UpdateEphemeris' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:priority:UpdateEphemeris' :: Maybe Natural
priority = forall a. Maybe a
Prelude.Nothing,
      $sel:enabled:UpdateEphemeris' :: Bool
enabled = Bool
pEnabled_,
      $sel:ephemerisId:UpdateEphemeris' :: Text
ephemerisId = Text
pEphemerisId_
    }

-- | A name string associated with the ephemeris. Used as a human-readable
-- identifier for the ephemeris.
updateEphemeris_name :: Lens.Lens' UpdateEphemeris (Prelude.Maybe Prelude.Text)
updateEphemeris_name :: Lens' UpdateEphemeris (Maybe Text)
updateEphemeris_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateEphemeris' {Maybe Text
name :: Maybe Text
$sel:name:UpdateEphemeris' :: UpdateEphemeris -> Maybe Text
name} -> Maybe Text
name) (\s :: UpdateEphemeris
s@UpdateEphemeris' {} Maybe Text
a -> UpdateEphemeris
s {$sel:name:UpdateEphemeris' :: Maybe Text
name = Maybe Text
a} :: UpdateEphemeris)

-- | Customer-provided priority score to establish the order in which
-- overlapping ephemerides should be used.
--
-- The default for customer-provided ephemeris priority is 1, and higher
-- numbers take precedence.
--
-- Priority must be 1 or greater
updateEphemeris_priority :: Lens.Lens' UpdateEphemeris (Prelude.Maybe Prelude.Natural)
updateEphemeris_priority :: Lens' UpdateEphemeris (Maybe Natural)
updateEphemeris_priority = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateEphemeris' {Maybe Natural
priority :: Maybe Natural
$sel:priority:UpdateEphemeris' :: UpdateEphemeris -> Maybe Natural
priority} -> Maybe Natural
priority) (\s :: UpdateEphemeris
s@UpdateEphemeris' {} Maybe Natural
a -> UpdateEphemeris
s {$sel:priority:UpdateEphemeris' :: Maybe Natural
priority = Maybe Natural
a} :: UpdateEphemeris)

-- | Whether the ephemeris is enabled or not. Changing this value will not
-- require the ephemeris to be re-validated.
updateEphemeris_enabled :: Lens.Lens' UpdateEphemeris Prelude.Bool
updateEphemeris_enabled :: Lens' UpdateEphemeris Bool
updateEphemeris_enabled = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateEphemeris' {Bool
enabled :: Bool
$sel:enabled:UpdateEphemeris' :: UpdateEphemeris -> Bool
enabled} -> Bool
enabled) (\s :: UpdateEphemeris
s@UpdateEphemeris' {} Bool
a -> UpdateEphemeris
s {$sel:enabled:UpdateEphemeris' :: Bool
enabled = Bool
a} :: UpdateEphemeris)

-- | The AWS Ground Station ephemeris ID.
updateEphemeris_ephemerisId :: Lens.Lens' UpdateEphemeris Prelude.Text
updateEphemeris_ephemerisId :: Lens' UpdateEphemeris Text
updateEphemeris_ephemerisId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateEphemeris' {Text
ephemerisId :: Text
$sel:ephemerisId:UpdateEphemeris' :: UpdateEphemeris -> Text
ephemerisId} -> Text
ephemerisId) (\s :: UpdateEphemeris
s@UpdateEphemeris' {} Text
a -> UpdateEphemeris
s {$sel:ephemerisId:UpdateEphemeris' :: Text
ephemerisId = Text
a} :: UpdateEphemeris)

instance Core.AWSRequest UpdateEphemeris where
  type
    AWSResponse UpdateEphemeris =
      EphemerisIdResponse
  request :: (Service -> Service) -> UpdateEphemeris -> Request UpdateEphemeris
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.putJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy UpdateEphemeris
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse UpdateEphemeris)))
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 -> forall a. FromJSON a => Object -> Either String a
Data.eitherParseJSON Object
x)

instance Prelude.Hashable UpdateEphemeris where
  hashWithSalt :: Int -> UpdateEphemeris -> Int
hashWithSalt Int
_salt UpdateEphemeris' {Bool
Maybe Natural
Maybe Text
Text
ephemerisId :: Text
enabled :: Bool
priority :: Maybe Natural
name :: Maybe Text
$sel:ephemerisId:UpdateEphemeris' :: UpdateEphemeris -> Text
$sel:enabled:UpdateEphemeris' :: UpdateEphemeris -> Bool
$sel:priority:UpdateEphemeris' :: UpdateEphemeris -> Maybe Natural
$sel:name:UpdateEphemeris' :: UpdateEphemeris -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
priority
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Bool
enabled
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
ephemerisId

instance Prelude.NFData UpdateEphemeris where
  rnf :: UpdateEphemeris -> ()
rnf UpdateEphemeris' {Bool
Maybe Natural
Maybe Text
Text
ephemerisId :: Text
enabled :: Bool
priority :: Maybe Natural
name :: Maybe Text
$sel:ephemerisId:UpdateEphemeris' :: UpdateEphemeris -> Text
$sel:enabled:UpdateEphemeris' :: UpdateEphemeris -> Bool
$sel:priority:UpdateEphemeris' :: UpdateEphemeris -> Maybe Natural
$sel:name:UpdateEphemeris' :: UpdateEphemeris -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
priority
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Bool
enabled
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
ephemerisId

instance Data.ToHeaders UpdateEphemeris where
  toHeaders :: UpdateEphemeris -> 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 UpdateEphemeris where
  toJSON :: UpdateEphemeris -> Value
toJSON UpdateEphemeris' {Bool
Maybe Natural
Maybe Text
Text
ephemerisId :: Text
enabled :: Bool
priority :: Maybe Natural
name :: Maybe Text
$sel:ephemerisId:UpdateEphemeris' :: UpdateEphemeris -> Text
$sel:enabled:UpdateEphemeris' :: UpdateEphemeris -> Bool
$sel:priority:UpdateEphemeris' :: UpdateEphemeris -> Maybe Natural
$sel:name:UpdateEphemeris' :: UpdateEphemeris -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"name" 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
name,
            (Key
"priority" 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 Natural
priority,
            forall a. a -> Maybe a
Prelude.Just (Key
"enabled" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Bool
enabled)
          ]
      )

instance Data.ToPath UpdateEphemeris where
  toPath :: UpdateEphemeris -> ByteString
toPath UpdateEphemeris' {Bool
Maybe Natural
Maybe Text
Text
ephemerisId :: Text
enabled :: Bool
priority :: Maybe Natural
name :: Maybe Text
$sel:ephemerisId:UpdateEphemeris' :: UpdateEphemeris -> Text
$sel:enabled:UpdateEphemeris' :: UpdateEphemeris -> Bool
$sel:priority:UpdateEphemeris' :: UpdateEphemeris -> Maybe Natural
$sel:name:UpdateEphemeris' :: UpdateEphemeris -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"/ephemeris/", forall a. ToByteString a => a -> ByteString
Data.toBS Text
ephemerisId]

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