{-# 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.WorkDocs.DescribeUsers
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Describes the specified users. You can describe all users or filter the
-- results (for example, by status or organization).
--
-- By default, Amazon WorkDocs returns the first 24 active or pending
-- users. If there are more results, the response includes a marker that
-- you can use to request the next set of results.
--
-- This operation returns paginated results.
module Amazonka.WorkDocs.DescribeUsers
  ( -- * Creating a Request
    DescribeUsers (..),
    newDescribeUsers,

    -- * Request Lenses
    describeUsers_authenticationToken,
    describeUsers_fields,
    describeUsers_include,
    describeUsers_limit,
    describeUsers_marker,
    describeUsers_order,
    describeUsers_organizationId,
    describeUsers_query,
    describeUsers_sort,
    describeUsers_userIds,

    -- * Destructuring the Response
    DescribeUsersResponse (..),
    newDescribeUsersResponse,

    -- * Response Lenses
    describeUsersResponse_marker,
    describeUsersResponse_totalNumberOfUsers,
    describeUsersResponse_users,
    describeUsersResponse_httpStatus,
  )
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.WorkDocs.Types

-- | /See:/ 'newDescribeUsers' smart constructor.
data DescribeUsers = DescribeUsers'
  { -- | Amazon WorkDocs authentication token. Not required when using AWS
    -- administrator credentials to access the API.
    DescribeUsers -> Maybe (Sensitive Text)
authenticationToken :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | A comma-separated list of values. Specify \"STORAGE_METADATA\" to
    -- include the user storage quota and utilization information.
    DescribeUsers -> Maybe Text
fields :: Prelude.Maybe Prelude.Text,
    -- | The state of the users. Specify \"ALL\" to include inactive users.
    DescribeUsers -> Maybe UserFilterType
include :: Prelude.Maybe UserFilterType,
    -- | The maximum number of items to return.
    DescribeUsers -> Maybe Natural
limit :: Prelude.Maybe Prelude.Natural,
    -- | The marker for the next set of results. (You received this marker from a
    -- previous call.)
    DescribeUsers -> Maybe Text
marker :: Prelude.Maybe Prelude.Text,
    -- | The order for the results.
    DescribeUsers -> Maybe OrderType
order :: Prelude.Maybe OrderType,
    -- | The ID of the organization.
    DescribeUsers -> Maybe Text
organizationId :: Prelude.Maybe Prelude.Text,
    -- | A query to filter users by user name. Remember the following about the
    -- @Userids@ and @Query@ parameters:
    --
    -- -   If you don\'t use either parameter, the API returns a paginated list
    --     of all users on the site.
    --
    -- -   If you use both parameters, the API ignores the @Query@ parameter.
    --
    -- -   The @Userid@ parameter only returns user names that match a
    --     corresponding user ID.
    --
    -- -   The @Query@ parameter runs a \"prefix\" search for users by the
    --     @GivenName@, @SurName@, or @UserName@ fields included in a
    --     <https://docs.aws.amazon.com/workdocs/latest/APIReference/API_CreateUser.html CreateUser>
    --     API call. For example, querying on @Ma@ returns Márcia Oliveira,
    --     María García, and Mateo Jackson. If you use multiple characters, the
    --     API only returns data that matches all characters. For example,
    --     querying on @Ma J@ only returns Mateo Jackson.
    DescribeUsers -> Maybe (Sensitive Text)
query :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | The sorting criteria.
    DescribeUsers -> Maybe UserSortType
sort :: Prelude.Maybe UserSortType,
    -- | The IDs of the users.
    DescribeUsers -> Maybe Text
userIds :: Prelude.Maybe Prelude.Text
  }
  deriving (DescribeUsers -> DescribeUsers -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeUsers -> DescribeUsers -> Bool
$c/= :: DescribeUsers -> DescribeUsers -> Bool
== :: DescribeUsers -> DescribeUsers -> Bool
$c== :: DescribeUsers -> DescribeUsers -> Bool
Prelude.Eq, Int -> DescribeUsers -> ShowS
[DescribeUsers] -> ShowS
DescribeUsers -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeUsers] -> ShowS
$cshowList :: [DescribeUsers] -> ShowS
show :: DescribeUsers -> String
$cshow :: DescribeUsers -> String
showsPrec :: Int -> DescribeUsers -> ShowS
$cshowsPrec :: Int -> DescribeUsers -> ShowS
Prelude.Show, forall x. Rep DescribeUsers x -> DescribeUsers
forall x. DescribeUsers -> Rep DescribeUsers x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeUsers x -> DescribeUsers
$cfrom :: forall x. DescribeUsers -> Rep DescribeUsers x
Prelude.Generic)

-- |
-- Create a value of 'DescribeUsers' 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:
--
-- 'authenticationToken', 'describeUsers_authenticationToken' - Amazon WorkDocs authentication token. Not required when using AWS
-- administrator credentials to access the API.
--
-- 'fields', 'describeUsers_fields' - A comma-separated list of values. Specify \"STORAGE_METADATA\" to
-- include the user storage quota and utilization information.
--
-- 'include', 'describeUsers_include' - The state of the users. Specify \"ALL\" to include inactive users.
--
-- 'limit', 'describeUsers_limit' - The maximum number of items to return.
--
-- 'marker', 'describeUsers_marker' - The marker for the next set of results. (You received this marker from a
-- previous call.)
--
-- 'order', 'describeUsers_order' - The order for the results.
--
-- 'organizationId', 'describeUsers_organizationId' - The ID of the organization.
--
-- 'query', 'describeUsers_query' - A query to filter users by user name. Remember the following about the
-- @Userids@ and @Query@ parameters:
--
-- -   If you don\'t use either parameter, the API returns a paginated list
--     of all users on the site.
--
-- -   If you use both parameters, the API ignores the @Query@ parameter.
--
-- -   The @Userid@ parameter only returns user names that match a
--     corresponding user ID.
--
-- -   The @Query@ parameter runs a \"prefix\" search for users by the
--     @GivenName@, @SurName@, or @UserName@ fields included in a
--     <https://docs.aws.amazon.com/workdocs/latest/APIReference/API_CreateUser.html CreateUser>
--     API call. For example, querying on @Ma@ returns Márcia Oliveira,
--     María García, and Mateo Jackson. If you use multiple characters, the
--     API only returns data that matches all characters. For example,
--     querying on @Ma J@ only returns Mateo Jackson.
--
-- 'sort', 'describeUsers_sort' - The sorting criteria.
--
-- 'userIds', 'describeUsers_userIds' - The IDs of the users.
newDescribeUsers ::
  DescribeUsers
newDescribeUsers :: DescribeUsers
newDescribeUsers =
  DescribeUsers'
    { $sel:authenticationToken:DescribeUsers' :: Maybe (Sensitive Text)
authenticationToken =
        forall a. Maybe a
Prelude.Nothing,
      $sel:fields:DescribeUsers' :: Maybe Text
fields = forall a. Maybe a
Prelude.Nothing,
      $sel:include:DescribeUsers' :: Maybe UserFilterType
include = forall a. Maybe a
Prelude.Nothing,
      $sel:limit:DescribeUsers' :: Maybe Natural
limit = forall a. Maybe a
Prelude.Nothing,
      $sel:marker:DescribeUsers' :: Maybe Text
marker = forall a. Maybe a
Prelude.Nothing,
      $sel:order:DescribeUsers' :: Maybe OrderType
order = forall a. Maybe a
Prelude.Nothing,
      $sel:organizationId:DescribeUsers' :: Maybe Text
organizationId = forall a. Maybe a
Prelude.Nothing,
      $sel:query:DescribeUsers' :: Maybe (Sensitive Text)
query = forall a. Maybe a
Prelude.Nothing,
      $sel:sort:DescribeUsers' :: Maybe UserSortType
sort = forall a. Maybe a
Prelude.Nothing,
      $sel:userIds:DescribeUsers' :: Maybe Text
userIds = forall a. Maybe a
Prelude.Nothing
    }

-- | Amazon WorkDocs authentication token. Not required when using AWS
-- administrator credentials to access the API.
describeUsers_authenticationToken :: Lens.Lens' DescribeUsers (Prelude.Maybe Prelude.Text)
describeUsers_authenticationToken :: Lens' DescribeUsers (Maybe Text)
describeUsers_authenticationToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeUsers' {Maybe (Sensitive Text)
authenticationToken :: Maybe (Sensitive Text)
$sel:authenticationToken:DescribeUsers' :: DescribeUsers -> Maybe (Sensitive Text)
authenticationToken} -> Maybe (Sensitive Text)
authenticationToken) (\s :: DescribeUsers
s@DescribeUsers' {} Maybe (Sensitive Text)
a -> DescribeUsers
s {$sel:authenticationToken:DescribeUsers' :: Maybe (Sensitive Text)
authenticationToken = Maybe (Sensitive Text)
a} :: DescribeUsers) 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

-- | A comma-separated list of values. Specify \"STORAGE_METADATA\" to
-- include the user storage quota and utilization information.
describeUsers_fields :: Lens.Lens' DescribeUsers (Prelude.Maybe Prelude.Text)
describeUsers_fields :: Lens' DescribeUsers (Maybe Text)
describeUsers_fields = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeUsers' {Maybe Text
fields :: Maybe Text
$sel:fields:DescribeUsers' :: DescribeUsers -> Maybe Text
fields} -> Maybe Text
fields) (\s :: DescribeUsers
s@DescribeUsers' {} Maybe Text
a -> DescribeUsers
s {$sel:fields:DescribeUsers' :: Maybe Text
fields = Maybe Text
a} :: DescribeUsers)

-- | The state of the users. Specify \"ALL\" to include inactive users.
describeUsers_include :: Lens.Lens' DescribeUsers (Prelude.Maybe UserFilterType)
describeUsers_include :: Lens' DescribeUsers (Maybe UserFilterType)
describeUsers_include = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeUsers' {Maybe UserFilterType
include :: Maybe UserFilterType
$sel:include:DescribeUsers' :: DescribeUsers -> Maybe UserFilterType
include} -> Maybe UserFilterType
include) (\s :: DescribeUsers
s@DescribeUsers' {} Maybe UserFilterType
a -> DescribeUsers
s {$sel:include:DescribeUsers' :: Maybe UserFilterType
include = Maybe UserFilterType
a} :: DescribeUsers)

-- | The maximum number of items to return.
describeUsers_limit :: Lens.Lens' DescribeUsers (Prelude.Maybe Prelude.Natural)
describeUsers_limit :: Lens' DescribeUsers (Maybe Natural)
describeUsers_limit = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeUsers' {Maybe Natural
limit :: Maybe Natural
$sel:limit:DescribeUsers' :: DescribeUsers -> Maybe Natural
limit} -> Maybe Natural
limit) (\s :: DescribeUsers
s@DescribeUsers' {} Maybe Natural
a -> DescribeUsers
s {$sel:limit:DescribeUsers' :: Maybe Natural
limit = Maybe Natural
a} :: DescribeUsers)

-- | The marker for the next set of results. (You received this marker from a
-- previous call.)
describeUsers_marker :: Lens.Lens' DescribeUsers (Prelude.Maybe Prelude.Text)
describeUsers_marker :: Lens' DescribeUsers (Maybe Text)
describeUsers_marker = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeUsers' {Maybe Text
marker :: Maybe Text
$sel:marker:DescribeUsers' :: DescribeUsers -> Maybe Text
marker} -> Maybe Text
marker) (\s :: DescribeUsers
s@DescribeUsers' {} Maybe Text
a -> DescribeUsers
s {$sel:marker:DescribeUsers' :: Maybe Text
marker = Maybe Text
a} :: DescribeUsers)

-- | The order for the results.
describeUsers_order :: Lens.Lens' DescribeUsers (Prelude.Maybe OrderType)
describeUsers_order :: Lens' DescribeUsers (Maybe OrderType)
describeUsers_order = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeUsers' {Maybe OrderType
order :: Maybe OrderType
$sel:order:DescribeUsers' :: DescribeUsers -> Maybe OrderType
order} -> Maybe OrderType
order) (\s :: DescribeUsers
s@DescribeUsers' {} Maybe OrderType
a -> DescribeUsers
s {$sel:order:DescribeUsers' :: Maybe OrderType
order = Maybe OrderType
a} :: DescribeUsers)

-- | The ID of the organization.
describeUsers_organizationId :: Lens.Lens' DescribeUsers (Prelude.Maybe Prelude.Text)
describeUsers_organizationId :: Lens' DescribeUsers (Maybe Text)
describeUsers_organizationId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeUsers' {Maybe Text
organizationId :: Maybe Text
$sel:organizationId:DescribeUsers' :: DescribeUsers -> Maybe Text
organizationId} -> Maybe Text
organizationId) (\s :: DescribeUsers
s@DescribeUsers' {} Maybe Text
a -> DescribeUsers
s {$sel:organizationId:DescribeUsers' :: Maybe Text
organizationId = Maybe Text
a} :: DescribeUsers)

-- | A query to filter users by user name. Remember the following about the
-- @Userids@ and @Query@ parameters:
--
-- -   If you don\'t use either parameter, the API returns a paginated list
--     of all users on the site.
--
-- -   If you use both parameters, the API ignores the @Query@ parameter.
--
-- -   The @Userid@ parameter only returns user names that match a
--     corresponding user ID.
--
-- -   The @Query@ parameter runs a \"prefix\" search for users by the
--     @GivenName@, @SurName@, or @UserName@ fields included in a
--     <https://docs.aws.amazon.com/workdocs/latest/APIReference/API_CreateUser.html CreateUser>
--     API call. For example, querying on @Ma@ returns Márcia Oliveira,
--     María García, and Mateo Jackson. If you use multiple characters, the
--     API only returns data that matches all characters. For example,
--     querying on @Ma J@ only returns Mateo Jackson.
describeUsers_query :: Lens.Lens' DescribeUsers (Prelude.Maybe Prelude.Text)
describeUsers_query :: Lens' DescribeUsers (Maybe Text)
describeUsers_query = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeUsers' {Maybe (Sensitive Text)
query :: Maybe (Sensitive Text)
$sel:query:DescribeUsers' :: DescribeUsers -> Maybe (Sensitive Text)
query} -> Maybe (Sensitive Text)
query) (\s :: DescribeUsers
s@DescribeUsers' {} Maybe (Sensitive Text)
a -> DescribeUsers
s {$sel:query:DescribeUsers' :: Maybe (Sensitive Text)
query = Maybe (Sensitive Text)
a} :: DescribeUsers) 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

-- | The sorting criteria.
describeUsers_sort :: Lens.Lens' DescribeUsers (Prelude.Maybe UserSortType)
describeUsers_sort :: Lens' DescribeUsers (Maybe UserSortType)
describeUsers_sort = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeUsers' {Maybe UserSortType
sort :: Maybe UserSortType
$sel:sort:DescribeUsers' :: DescribeUsers -> Maybe UserSortType
sort} -> Maybe UserSortType
sort) (\s :: DescribeUsers
s@DescribeUsers' {} Maybe UserSortType
a -> DescribeUsers
s {$sel:sort:DescribeUsers' :: Maybe UserSortType
sort = Maybe UserSortType
a} :: DescribeUsers)

-- | The IDs of the users.
describeUsers_userIds :: Lens.Lens' DescribeUsers (Prelude.Maybe Prelude.Text)
describeUsers_userIds :: Lens' DescribeUsers (Maybe Text)
describeUsers_userIds = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeUsers' {Maybe Text
userIds :: Maybe Text
$sel:userIds:DescribeUsers' :: DescribeUsers -> Maybe Text
userIds} -> Maybe Text
userIds) (\s :: DescribeUsers
s@DescribeUsers' {} Maybe Text
a -> DescribeUsers
s {$sel:userIds:DescribeUsers' :: Maybe Text
userIds = Maybe Text
a} :: DescribeUsers)

instance Core.AWSPager DescribeUsers where
  page :: DescribeUsers -> AWSResponse DescribeUsers -> Maybe DescribeUsers
page DescribeUsers
rq AWSResponse DescribeUsers
rs
    | forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse DescribeUsers
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' DescribeUsersResponse (Maybe Text)
describeUsersResponse_marker
            forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
        forall a. Maybe a
Prelude.Nothing
    | forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse DescribeUsers
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' DescribeUsersResponse (Maybe [User])
describeUsersResponse_users
            forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
        forall a. Maybe a
Prelude.Nothing
    | Bool
Prelude.otherwise =
        forall a. a -> Maybe a
Prelude.Just
          forall a b. (a -> b) -> a -> b
Prelude.$ DescribeUsers
rq
          forall a b. a -> (a -> b) -> b
Prelude.& Lens' DescribeUsers (Maybe Text)
describeUsers_marker
          forall s t a b. ASetter s t a b -> b -> s -> t
Lens..~ AWSResponse DescribeUsers
rs
          forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' DescribeUsersResponse (Maybe Text)
describeUsersResponse_marker
          forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just

instance Core.AWSRequest DescribeUsers where
  type
    AWSResponse DescribeUsers =
      DescribeUsersResponse
  request :: (Service -> Service) -> DescribeUsers -> Request DescribeUsers
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.get (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DescribeUsers
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse DescribeUsers)))
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 ->
          Maybe Text
-> Maybe Integer -> Maybe [User] -> Int -> DescribeUsersResponse
DescribeUsersResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"Marker")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"TotalNumberOfUsers")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"Users" forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty)
            forall (f :: * -> *) a b. Applicative f => 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))
      )

instance Prelude.Hashable DescribeUsers where
  hashWithSalt :: Int -> DescribeUsers -> Int
hashWithSalt Int
_salt DescribeUsers' {Maybe Natural
Maybe Text
Maybe (Sensitive Text)
Maybe OrderType
Maybe UserFilterType
Maybe UserSortType
userIds :: Maybe Text
sort :: Maybe UserSortType
query :: Maybe (Sensitive Text)
organizationId :: Maybe Text
order :: Maybe OrderType
marker :: Maybe Text
limit :: Maybe Natural
include :: Maybe UserFilterType
fields :: Maybe Text
authenticationToken :: Maybe (Sensitive Text)
$sel:userIds:DescribeUsers' :: DescribeUsers -> Maybe Text
$sel:sort:DescribeUsers' :: DescribeUsers -> Maybe UserSortType
$sel:query:DescribeUsers' :: DescribeUsers -> Maybe (Sensitive Text)
$sel:organizationId:DescribeUsers' :: DescribeUsers -> Maybe Text
$sel:order:DescribeUsers' :: DescribeUsers -> Maybe OrderType
$sel:marker:DescribeUsers' :: DescribeUsers -> Maybe Text
$sel:limit:DescribeUsers' :: DescribeUsers -> Maybe Natural
$sel:include:DescribeUsers' :: DescribeUsers -> Maybe UserFilterType
$sel:fields:DescribeUsers' :: DescribeUsers -> Maybe Text
$sel:authenticationToken:DescribeUsers' :: DescribeUsers -> Maybe (Sensitive Text)
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (Sensitive Text)
authenticationToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
fields
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe UserFilterType
include
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
limit
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
marker
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe OrderType
order
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
organizationId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (Sensitive Text)
query
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe UserSortType
sort
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
userIds

instance Prelude.NFData DescribeUsers where
  rnf :: DescribeUsers -> ()
rnf DescribeUsers' {Maybe Natural
Maybe Text
Maybe (Sensitive Text)
Maybe OrderType
Maybe UserFilterType
Maybe UserSortType
userIds :: Maybe Text
sort :: Maybe UserSortType
query :: Maybe (Sensitive Text)
organizationId :: Maybe Text
order :: Maybe OrderType
marker :: Maybe Text
limit :: Maybe Natural
include :: Maybe UserFilterType
fields :: Maybe Text
authenticationToken :: Maybe (Sensitive Text)
$sel:userIds:DescribeUsers' :: DescribeUsers -> Maybe Text
$sel:sort:DescribeUsers' :: DescribeUsers -> Maybe UserSortType
$sel:query:DescribeUsers' :: DescribeUsers -> Maybe (Sensitive Text)
$sel:organizationId:DescribeUsers' :: DescribeUsers -> Maybe Text
$sel:order:DescribeUsers' :: DescribeUsers -> Maybe OrderType
$sel:marker:DescribeUsers' :: DescribeUsers -> Maybe Text
$sel:limit:DescribeUsers' :: DescribeUsers -> Maybe Natural
$sel:include:DescribeUsers' :: DescribeUsers -> Maybe UserFilterType
$sel:fields:DescribeUsers' :: DescribeUsers -> Maybe Text
$sel:authenticationToken:DescribeUsers' :: DescribeUsers -> Maybe (Sensitive Text)
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe (Sensitive Text)
authenticationToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
fields
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe UserFilterType
include
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
limit
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
marker
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe OrderType
order
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
organizationId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (Sensitive Text)
query
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe UserSortType
sort
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
userIds

instance Data.ToHeaders DescribeUsers where
  toHeaders :: DescribeUsers -> ResponseHeaders
toHeaders DescribeUsers' {Maybe Natural
Maybe Text
Maybe (Sensitive Text)
Maybe OrderType
Maybe UserFilterType
Maybe UserSortType
userIds :: Maybe Text
sort :: Maybe UserSortType
query :: Maybe (Sensitive Text)
organizationId :: Maybe Text
order :: Maybe OrderType
marker :: Maybe Text
limit :: Maybe Natural
include :: Maybe UserFilterType
fields :: Maybe Text
authenticationToken :: Maybe (Sensitive Text)
$sel:userIds:DescribeUsers' :: DescribeUsers -> Maybe Text
$sel:sort:DescribeUsers' :: DescribeUsers -> Maybe UserSortType
$sel:query:DescribeUsers' :: DescribeUsers -> Maybe (Sensitive Text)
$sel:organizationId:DescribeUsers' :: DescribeUsers -> Maybe Text
$sel:order:DescribeUsers' :: DescribeUsers -> Maybe OrderType
$sel:marker:DescribeUsers' :: DescribeUsers -> Maybe Text
$sel:limit:DescribeUsers' :: DescribeUsers -> Maybe Natural
$sel:include:DescribeUsers' :: DescribeUsers -> Maybe UserFilterType
$sel:fields:DescribeUsers' :: DescribeUsers -> Maybe Text
$sel:authenticationToken:DescribeUsers' :: DescribeUsers -> Maybe (Sensitive Text)
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ HeaderName
"Authentication" forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# Maybe (Sensitive Text)
authenticationToken,
        HeaderName
"Content-Type"
          forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# (ByteString
"application/x-amz-json-1.1" :: Prelude.ByteString)
      ]

instance Data.ToPath DescribeUsers where
  toPath :: DescribeUsers -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/api/v1/users"

instance Data.ToQuery DescribeUsers where
  toQuery :: DescribeUsers -> QueryString
toQuery DescribeUsers' {Maybe Natural
Maybe Text
Maybe (Sensitive Text)
Maybe OrderType
Maybe UserFilterType
Maybe UserSortType
userIds :: Maybe Text
sort :: Maybe UserSortType
query :: Maybe (Sensitive Text)
organizationId :: Maybe Text
order :: Maybe OrderType
marker :: Maybe Text
limit :: Maybe Natural
include :: Maybe UserFilterType
fields :: Maybe Text
authenticationToken :: Maybe (Sensitive Text)
$sel:userIds:DescribeUsers' :: DescribeUsers -> Maybe Text
$sel:sort:DescribeUsers' :: DescribeUsers -> Maybe UserSortType
$sel:query:DescribeUsers' :: DescribeUsers -> Maybe (Sensitive Text)
$sel:organizationId:DescribeUsers' :: DescribeUsers -> Maybe Text
$sel:order:DescribeUsers' :: DescribeUsers -> Maybe OrderType
$sel:marker:DescribeUsers' :: DescribeUsers -> Maybe Text
$sel:limit:DescribeUsers' :: DescribeUsers -> Maybe Natural
$sel:include:DescribeUsers' :: DescribeUsers -> Maybe UserFilterType
$sel:fields:DescribeUsers' :: DescribeUsers -> Maybe Text
$sel:authenticationToken:DescribeUsers' :: DescribeUsers -> Maybe (Sensitive Text)
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"fields" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
fields,
        ByteString
"include" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe UserFilterType
include,
        ByteString
"limit" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Natural
limit,
        ByteString
"marker" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
marker,
        ByteString
"order" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe OrderType
order,
        ByteString
"organizationId" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
organizationId,
        ByteString
"query" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe (Sensitive Text)
query,
        ByteString
"sort" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe UserSortType
sort,
        ByteString
"userIds" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
userIds
      ]

-- | /See:/ 'newDescribeUsersResponse' smart constructor.
data DescribeUsersResponse = DescribeUsersResponse'
  { -- | The marker to use when requesting the next set of results. If there are
    -- no additional results, the string is empty.
    DescribeUsersResponse -> Maybe Text
marker :: Prelude.Maybe Prelude.Text,
    -- | The total number of users included in the results.
    DescribeUsersResponse -> Maybe Integer
totalNumberOfUsers :: Prelude.Maybe Prelude.Integer,
    -- | The users.
    DescribeUsersResponse -> Maybe [User]
users :: Prelude.Maybe [User],
    -- | The response's http status code.
    DescribeUsersResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeUsersResponse -> DescribeUsersResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeUsersResponse -> DescribeUsersResponse -> Bool
$c/= :: DescribeUsersResponse -> DescribeUsersResponse -> Bool
== :: DescribeUsersResponse -> DescribeUsersResponse -> Bool
$c== :: DescribeUsersResponse -> DescribeUsersResponse -> Bool
Prelude.Eq, Int -> DescribeUsersResponse -> ShowS
[DescribeUsersResponse] -> ShowS
DescribeUsersResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeUsersResponse] -> ShowS
$cshowList :: [DescribeUsersResponse] -> ShowS
show :: DescribeUsersResponse -> String
$cshow :: DescribeUsersResponse -> String
showsPrec :: Int -> DescribeUsersResponse -> ShowS
$cshowsPrec :: Int -> DescribeUsersResponse -> ShowS
Prelude.Show, forall x. Rep DescribeUsersResponse x -> DescribeUsersResponse
forall x. DescribeUsersResponse -> Rep DescribeUsersResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeUsersResponse x -> DescribeUsersResponse
$cfrom :: forall x. DescribeUsersResponse -> Rep DescribeUsersResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeUsersResponse' 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:
--
-- 'marker', 'describeUsersResponse_marker' - The marker to use when requesting the next set of results. If there are
-- no additional results, the string is empty.
--
-- 'totalNumberOfUsers', 'describeUsersResponse_totalNumberOfUsers' - The total number of users included in the results.
--
-- 'users', 'describeUsersResponse_users' - The users.
--
-- 'httpStatus', 'describeUsersResponse_httpStatus' - The response's http status code.
newDescribeUsersResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeUsersResponse
newDescribeUsersResponse :: Int -> DescribeUsersResponse
newDescribeUsersResponse Int
pHttpStatus_ =
  DescribeUsersResponse'
    { $sel:marker:DescribeUsersResponse' :: Maybe Text
marker = forall a. Maybe a
Prelude.Nothing,
      $sel:totalNumberOfUsers:DescribeUsersResponse' :: Maybe Integer
totalNumberOfUsers = forall a. Maybe a
Prelude.Nothing,
      $sel:users:DescribeUsersResponse' :: Maybe [User]
users = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeUsersResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The marker to use when requesting the next set of results. If there are
-- no additional results, the string is empty.
describeUsersResponse_marker :: Lens.Lens' DescribeUsersResponse (Prelude.Maybe Prelude.Text)
describeUsersResponse_marker :: Lens' DescribeUsersResponse (Maybe Text)
describeUsersResponse_marker = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeUsersResponse' {Maybe Text
marker :: Maybe Text
$sel:marker:DescribeUsersResponse' :: DescribeUsersResponse -> Maybe Text
marker} -> Maybe Text
marker) (\s :: DescribeUsersResponse
s@DescribeUsersResponse' {} Maybe Text
a -> DescribeUsersResponse
s {$sel:marker:DescribeUsersResponse' :: Maybe Text
marker = Maybe Text
a} :: DescribeUsersResponse)

-- | The total number of users included in the results.
describeUsersResponse_totalNumberOfUsers :: Lens.Lens' DescribeUsersResponse (Prelude.Maybe Prelude.Integer)
describeUsersResponse_totalNumberOfUsers :: Lens' DescribeUsersResponse (Maybe Integer)
describeUsersResponse_totalNumberOfUsers = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeUsersResponse' {Maybe Integer
totalNumberOfUsers :: Maybe Integer
$sel:totalNumberOfUsers:DescribeUsersResponse' :: DescribeUsersResponse -> Maybe Integer
totalNumberOfUsers} -> Maybe Integer
totalNumberOfUsers) (\s :: DescribeUsersResponse
s@DescribeUsersResponse' {} Maybe Integer
a -> DescribeUsersResponse
s {$sel:totalNumberOfUsers:DescribeUsersResponse' :: Maybe Integer
totalNumberOfUsers = Maybe Integer
a} :: DescribeUsersResponse)

-- | The users.
describeUsersResponse_users :: Lens.Lens' DescribeUsersResponse (Prelude.Maybe [User])
describeUsersResponse_users :: Lens' DescribeUsersResponse (Maybe [User])
describeUsersResponse_users = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeUsersResponse' {Maybe [User]
users :: Maybe [User]
$sel:users:DescribeUsersResponse' :: DescribeUsersResponse -> Maybe [User]
users} -> Maybe [User]
users) (\s :: DescribeUsersResponse
s@DescribeUsersResponse' {} Maybe [User]
a -> DescribeUsersResponse
s {$sel:users:DescribeUsersResponse' :: Maybe [User]
users = Maybe [User]
a} :: DescribeUsersResponse) 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 response's http status code.
describeUsersResponse_httpStatus :: Lens.Lens' DescribeUsersResponse Prelude.Int
describeUsersResponse_httpStatus :: Lens' DescribeUsersResponse Int
describeUsersResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeUsersResponse' {Int
httpStatus :: Int
$sel:httpStatus:DescribeUsersResponse' :: DescribeUsersResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: DescribeUsersResponse
s@DescribeUsersResponse' {} Int
a -> DescribeUsersResponse
s {$sel:httpStatus:DescribeUsersResponse' :: Int
httpStatus = Int
a} :: DescribeUsersResponse)

instance Prelude.NFData DescribeUsersResponse where
  rnf :: DescribeUsersResponse -> ()
rnf DescribeUsersResponse' {Int
Maybe Integer
Maybe [User]
Maybe Text
httpStatus :: Int
users :: Maybe [User]
totalNumberOfUsers :: Maybe Integer
marker :: Maybe Text
$sel:httpStatus:DescribeUsersResponse' :: DescribeUsersResponse -> Int
$sel:users:DescribeUsersResponse' :: DescribeUsersResponse -> Maybe [User]
$sel:totalNumberOfUsers:DescribeUsersResponse' :: DescribeUsersResponse -> Maybe Integer
$sel:marker:DescribeUsersResponse' :: DescribeUsersResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
marker
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Integer
totalNumberOfUsers
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [User]
users
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus