{-# 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.TimeStreamQuery.ExecuteScheduledQuery
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- You can use this API to run a scheduled query manually.
module Amazonka.TimeStreamQuery.ExecuteScheduledQuery
  ( -- * Creating a Request
    ExecuteScheduledQuery (..),
    newExecuteScheduledQuery,

    -- * Request Lenses
    executeScheduledQuery_clientToken,
    executeScheduledQuery_scheduledQueryArn,
    executeScheduledQuery_invocationTime,

    -- * Destructuring the Response
    ExecuteScheduledQueryResponse (..),
    newExecuteScheduledQueryResponse,
  )
where

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

-- | /See:/ 'newExecuteScheduledQuery' smart constructor.
data ExecuteScheduledQuery = ExecuteScheduledQuery'
  { -- | Not used.
    ExecuteScheduledQuery -> Maybe (Sensitive Text)
clientToken :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | ARN of the scheduled query.
    ExecuteScheduledQuery -> Text
scheduledQueryArn :: Prelude.Text,
    -- | The timestamp in UTC. Query will be run as if it was invoked at this
    -- timestamp.
    ExecuteScheduledQuery -> POSIX
invocationTime :: Data.POSIX
  }
  deriving (ExecuteScheduledQuery -> ExecuteScheduledQuery -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ExecuteScheduledQuery -> ExecuteScheduledQuery -> Bool
$c/= :: ExecuteScheduledQuery -> ExecuteScheduledQuery -> Bool
== :: ExecuteScheduledQuery -> ExecuteScheduledQuery -> Bool
$c== :: ExecuteScheduledQuery -> ExecuteScheduledQuery -> Bool
Prelude.Eq, Int -> ExecuteScheduledQuery -> ShowS
[ExecuteScheduledQuery] -> ShowS
ExecuteScheduledQuery -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ExecuteScheduledQuery] -> ShowS
$cshowList :: [ExecuteScheduledQuery] -> ShowS
show :: ExecuteScheduledQuery -> String
$cshow :: ExecuteScheduledQuery -> String
showsPrec :: Int -> ExecuteScheduledQuery -> ShowS
$cshowsPrec :: Int -> ExecuteScheduledQuery -> ShowS
Prelude.Show, forall x. Rep ExecuteScheduledQuery x -> ExecuteScheduledQuery
forall x. ExecuteScheduledQuery -> Rep ExecuteScheduledQuery x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ExecuteScheduledQuery x -> ExecuteScheduledQuery
$cfrom :: forall x. ExecuteScheduledQuery -> Rep ExecuteScheduledQuery x
Prelude.Generic)

-- |
-- Create a value of 'ExecuteScheduledQuery' 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:
--
-- 'clientToken', 'executeScheduledQuery_clientToken' - Not used.
--
-- 'scheduledQueryArn', 'executeScheduledQuery_scheduledQueryArn' - ARN of the scheduled query.
--
-- 'invocationTime', 'executeScheduledQuery_invocationTime' - The timestamp in UTC. Query will be run as if it was invoked at this
-- timestamp.
newExecuteScheduledQuery ::
  -- | 'scheduledQueryArn'
  Prelude.Text ->
  -- | 'invocationTime'
  Prelude.UTCTime ->
  ExecuteScheduledQuery
newExecuteScheduledQuery :: Text -> UTCTime -> ExecuteScheduledQuery
newExecuteScheduledQuery
  Text
pScheduledQueryArn_
  UTCTime
pInvocationTime_ =
    ExecuteScheduledQuery'
      { $sel:clientToken:ExecuteScheduledQuery' :: Maybe (Sensitive Text)
clientToken =
          forall a. Maybe a
Prelude.Nothing,
        $sel:scheduledQueryArn:ExecuteScheduledQuery' :: Text
scheduledQueryArn = Text
pScheduledQueryArn_,
        $sel:invocationTime:ExecuteScheduledQuery' :: POSIX
invocationTime = forall (a :: Format). Iso' (Time a) UTCTime
Data._Time forall t b. AReview t b -> b -> t
Lens.# UTCTime
pInvocationTime_
      }

-- | Not used.
executeScheduledQuery_clientToken :: Lens.Lens' ExecuteScheduledQuery (Prelude.Maybe Prelude.Text)
executeScheduledQuery_clientToken :: Lens' ExecuteScheduledQuery (Maybe Text)
executeScheduledQuery_clientToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExecuteScheduledQuery' {Maybe (Sensitive Text)
clientToken :: Maybe (Sensitive Text)
$sel:clientToken:ExecuteScheduledQuery' :: ExecuteScheduledQuery -> Maybe (Sensitive Text)
clientToken} -> Maybe (Sensitive Text)
clientToken) (\s :: ExecuteScheduledQuery
s@ExecuteScheduledQuery' {} Maybe (Sensitive Text)
a -> ExecuteScheduledQuery
s {$sel:clientToken:ExecuteScheduledQuery' :: Maybe (Sensitive Text)
clientToken = Maybe (Sensitive Text)
a} :: ExecuteScheduledQuery) 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 a. Iso' (Sensitive a) a
Data._Sensitive

-- | ARN of the scheduled query.
executeScheduledQuery_scheduledQueryArn :: Lens.Lens' ExecuteScheduledQuery Prelude.Text
executeScheduledQuery_scheduledQueryArn :: Lens' ExecuteScheduledQuery Text
executeScheduledQuery_scheduledQueryArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExecuteScheduledQuery' {Text
scheduledQueryArn :: Text
$sel:scheduledQueryArn:ExecuteScheduledQuery' :: ExecuteScheduledQuery -> Text
scheduledQueryArn} -> Text
scheduledQueryArn) (\s :: ExecuteScheduledQuery
s@ExecuteScheduledQuery' {} Text
a -> ExecuteScheduledQuery
s {$sel:scheduledQueryArn:ExecuteScheduledQuery' :: Text
scheduledQueryArn = Text
a} :: ExecuteScheduledQuery)

-- | The timestamp in UTC. Query will be run as if it was invoked at this
-- timestamp.
executeScheduledQuery_invocationTime :: Lens.Lens' ExecuteScheduledQuery Prelude.UTCTime
executeScheduledQuery_invocationTime :: Lens' ExecuteScheduledQuery UTCTime
executeScheduledQuery_invocationTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExecuteScheduledQuery' {POSIX
invocationTime :: POSIX
$sel:invocationTime:ExecuteScheduledQuery' :: ExecuteScheduledQuery -> POSIX
invocationTime} -> POSIX
invocationTime) (\s :: ExecuteScheduledQuery
s@ExecuteScheduledQuery' {} POSIX
a -> ExecuteScheduledQuery
s {$sel:invocationTime:ExecuteScheduledQuery' :: POSIX
invocationTime = POSIX
a} :: ExecuteScheduledQuery) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

instance Core.AWSRequest ExecuteScheduledQuery where
  type
    AWSResponse ExecuteScheduledQuery =
      ExecuteScheduledQueryResponse
  request :: (Service -> Service)
-> ExecuteScheduledQuery -> Request ExecuteScheduledQuery
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 ExecuteScheduledQuery
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse ExecuteScheduledQuery)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull ExecuteScheduledQueryResponse
ExecuteScheduledQueryResponse'

instance Prelude.Hashable ExecuteScheduledQuery where
  hashWithSalt :: Int -> ExecuteScheduledQuery -> Int
hashWithSalt Int
_salt ExecuteScheduledQuery' {Maybe (Sensitive Text)
Text
POSIX
invocationTime :: POSIX
scheduledQueryArn :: Text
clientToken :: Maybe (Sensitive Text)
$sel:invocationTime:ExecuteScheduledQuery' :: ExecuteScheduledQuery -> POSIX
$sel:scheduledQueryArn:ExecuteScheduledQuery' :: ExecuteScheduledQuery -> Text
$sel:clientToken:ExecuteScheduledQuery' :: ExecuteScheduledQuery -> Maybe (Sensitive Text)
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (Sensitive Text)
clientToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
scheduledQueryArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` POSIX
invocationTime

instance Prelude.NFData ExecuteScheduledQuery where
  rnf :: ExecuteScheduledQuery -> ()
rnf ExecuteScheduledQuery' {Maybe (Sensitive Text)
Text
POSIX
invocationTime :: POSIX
scheduledQueryArn :: Text
clientToken :: Maybe (Sensitive Text)
$sel:invocationTime:ExecuteScheduledQuery' :: ExecuteScheduledQuery -> POSIX
$sel:scheduledQueryArn:ExecuteScheduledQuery' :: ExecuteScheduledQuery -> Text
$sel:clientToken:ExecuteScheduledQuery' :: ExecuteScheduledQuery -> Maybe (Sensitive Text)
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe (Sensitive Text)
clientToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
scheduledQueryArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf POSIX
invocationTime

instance Data.ToHeaders ExecuteScheduledQuery where
  toHeaders :: ExecuteScheduledQuery -> [Header]
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"X-Amz-Target"
              forall a. ToHeader a => HeaderName -> a -> [Header]
Data.=# ( ByteString
"Timestream_20181101.ExecuteScheduledQuery" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> [Header]
Data.=# ( ByteString
"application/x-amz-json-1.0" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON ExecuteScheduledQuery where
  toJSON :: ExecuteScheduledQuery -> Value
toJSON ExecuteScheduledQuery' {Maybe (Sensitive Text)
Text
POSIX
invocationTime :: POSIX
scheduledQueryArn :: Text
clientToken :: Maybe (Sensitive Text)
$sel:invocationTime:ExecuteScheduledQuery' :: ExecuteScheduledQuery -> POSIX
$sel:scheduledQueryArn:ExecuteScheduledQuery' :: ExecuteScheduledQuery -> Text
$sel:clientToken:ExecuteScheduledQuery' :: ExecuteScheduledQuery -> Maybe (Sensitive Text)
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"ClientToken" 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 (Sensitive Text)
clientToken,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"ScheduledQueryArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
scheduledQueryArn),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"InvocationTime" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= POSIX
invocationTime)
          ]
      )

instance Data.ToPath ExecuteScheduledQuery where
  toPath :: ExecuteScheduledQuery -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

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

-- | /See:/ 'newExecuteScheduledQueryResponse' smart constructor.
data ExecuteScheduledQueryResponse = ExecuteScheduledQueryResponse'
  {
  }
  deriving (ExecuteScheduledQueryResponse
-> ExecuteScheduledQueryResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ExecuteScheduledQueryResponse
-> ExecuteScheduledQueryResponse -> Bool
$c/= :: ExecuteScheduledQueryResponse
-> ExecuteScheduledQueryResponse -> Bool
== :: ExecuteScheduledQueryResponse
-> ExecuteScheduledQueryResponse -> Bool
$c== :: ExecuteScheduledQueryResponse
-> ExecuteScheduledQueryResponse -> Bool
Prelude.Eq, ReadPrec [ExecuteScheduledQueryResponse]
ReadPrec ExecuteScheduledQueryResponse
Int -> ReadS ExecuteScheduledQueryResponse
ReadS [ExecuteScheduledQueryResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ExecuteScheduledQueryResponse]
$creadListPrec :: ReadPrec [ExecuteScheduledQueryResponse]
readPrec :: ReadPrec ExecuteScheduledQueryResponse
$creadPrec :: ReadPrec ExecuteScheduledQueryResponse
readList :: ReadS [ExecuteScheduledQueryResponse]
$creadList :: ReadS [ExecuteScheduledQueryResponse]
readsPrec :: Int -> ReadS ExecuteScheduledQueryResponse
$creadsPrec :: Int -> ReadS ExecuteScheduledQueryResponse
Prelude.Read, Int -> ExecuteScheduledQueryResponse -> ShowS
[ExecuteScheduledQueryResponse] -> ShowS
ExecuteScheduledQueryResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ExecuteScheduledQueryResponse] -> ShowS
$cshowList :: [ExecuteScheduledQueryResponse] -> ShowS
show :: ExecuteScheduledQueryResponse -> String
$cshow :: ExecuteScheduledQueryResponse -> String
showsPrec :: Int -> ExecuteScheduledQueryResponse -> ShowS
$cshowsPrec :: Int -> ExecuteScheduledQueryResponse -> ShowS
Prelude.Show, forall x.
Rep ExecuteScheduledQueryResponse x
-> ExecuteScheduledQueryResponse
forall x.
ExecuteScheduledQueryResponse
-> Rep ExecuteScheduledQueryResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep ExecuteScheduledQueryResponse x
-> ExecuteScheduledQueryResponse
$cfrom :: forall x.
ExecuteScheduledQueryResponse
-> Rep ExecuteScheduledQueryResponse x
Prelude.Generic)

-- |
-- Create a value of 'ExecuteScheduledQueryResponse' 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.
newExecuteScheduledQueryResponse ::
  ExecuteScheduledQueryResponse
newExecuteScheduledQueryResponse :: ExecuteScheduledQueryResponse
newExecuteScheduledQueryResponse =
  ExecuteScheduledQueryResponse
ExecuteScheduledQueryResponse'

instance Prelude.NFData ExecuteScheduledQueryResponse where
  rnf :: ExecuteScheduledQueryResponse -> ()
rnf ExecuteScheduledQueryResponse
_ = ()