{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}

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

-- |
-- Module      : Amazonka.IAM.Types.PolicySourceType
-- Copyright   : (c) 2013-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.IAM.Types.PolicySourceType
  ( PolicySourceType
      ( ..,
        PolicySourceType_Aws_managed,
        PolicySourceType_Group,
        PolicySourceType_None,
        PolicySourceType_Resource,
        PolicySourceType_Role,
        PolicySourceType_User,
        PolicySourceType_User_managed
      ),
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Prelude as Prelude

newtype PolicySourceType = PolicySourceType'
  { PolicySourceType -> Text
fromPolicySourceType ::
      Core.Text
  }
  deriving stock
    ( Int -> PolicySourceType -> ShowS
[PolicySourceType] -> ShowS
PolicySourceType -> String
(Int -> PolicySourceType -> ShowS)
-> (PolicySourceType -> String)
-> ([PolicySourceType] -> ShowS)
-> Show PolicySourceType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PolicySourceType] -> ShowS
$cshowList :: [PolicySourceType] -> ShowS
show :: PolicySourceType -> String
$cshow :: PolicySourceType -> String
showsPrec :: Int -> PolicySourceType -> ShowS
$cshowsPrec :: Int -> PolicySourceType -> ShowS
Prelude.Show,
      ReadPrec [PolicySourceType]
ReadPrec PolicySourceType
Int -> ReadS PolicySourceType
ReadS [PolicySourceType]
(Int -> ReadS PolicySourceType)
-> ReadS [PolicySourceType]
-> ReadPrec PolicySourceType
-> ReadPrec [PolicySourceType]
-> Read PolicySourceType
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PolicySourceType]
$creadListPrec :: ReadPrec [PolicySourceType]
readPrec :: ReadPrec PolicySourceType
$creadPrec :: ReadPrec PolicySourceType
readList :: ReadS [PolicySourceType]
$creadList :: ReadS [PolicySourceType]
readsPrec :: Int -> ReadS PolicySourceType
$creadsPrec :: Int -> ReadS PolicySourceType
Prelude.Read,
      PolicySourceType -> PolicySourceType -> Bool
(PolicySourceType -> PolicySourceType -> Bool)
-> (PolicySourceType -> PolicySourceType -> Bool)
-> Eq PolicySourceType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PolicySourceType -> PolicySourceType -> Bool
$c/= :: PolicySourceType -> PolicySourceType -> Bool
== :: PolicySourceType -> PolicySourceType -> Bool
$c== :: PolicySourceType -> PolicySourceType -> Bool
Prelude.Eq,
      Eq PolicySourceType
Eq PolicySourceType
-> (PolicySourceType -> PolicySourceType -> Ordering)
-> (PolicySourceType -> PolicySourceType -> Bool)
-> (PolicySourceType -> PolicySourceType -> Bool)
-> (PolicySourceType -> PolicySourceType -> Bool)
-> (PolicySourceType -> PolicySourceType -> Bool)
-> (PolicySourceType -> PolicySourceType -> PolicySourceType)
-> (PolicySourceType -> PolicySourceType -> PolicySourceType)
-> Ord PolicySourceType
PolicySourceType -> PolicySourceType -> Bool
PolicySourceType -> PolicySourceType -> Ordering
PolicySourceType -> PolicySourceType -> PolicySourceType
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: PolicySourceType -> PolicySourceType -> PolicySourceType
$cmin :: PolicySourceType -> PolicySourceType -> PolicySourceType
max :: PolicySourceType -> PolicySourceType -> PolicySourceType
$cmax :: PolicySourceType -> PolicySourceType -> PolicySourceType
>= :: PolicySourceType -> PolicySourceType -> Bool
$c>= :: PolicySourceType -> PolicySourceType -> Bool
> :: PolicySourceType -> PolicySourceType -> Bool
$c> :: PolicySourceType -> PolicySourceType -> Bool
<= :: PolicySourceType -> PolicySourceType -> Bool
$c<= :: PolicySourceType -> PolicySourceType -> Bool
< :: PolicySourceType -> PolicySourceType -> Bool
$c< :: PolicySourceType -> PolicySourceType -> Bool
compare :: PolicySourceType -> PolicySourceType -> Ordering
$ccompare :: PolicySourceType -> PolicySourceType -> Ordering
$cp1Ord :: Eq PolicySourceType
Prelude.Ord,
      (forall x. PolicySourceType -> Rep PolicySourceType x)
-> (forall x. Rep PolicySourceType x -> PolicySourceType)
-> Generic PolicySourceType
forall x. Rep PolicySourceType x -> PolicySourceType
forall x. PolicySourceType -> Rep PolicySourceType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep PolicySourceType x -> PolicySourceType
$cfrom :: forall x. PolicySourceType -> Rep PolicySourceType x
Prelude.Generic
    )
  deriving newtype
    ( Int -> PolicySourceType -> Int
PolicySourceType -> Int
(Int -> PolicySourceType -> Int)
-> (PolicySourceType -> Int) -> Hashable PolicySourceType
forall a. (Int -> a -> Int) -> (a -> Int) -> Hashable a
hash :: PolicySourceType -> Int
$chash :: PolicySourceType -> Int
hashWithSalt :: Int -> PolicySourceType -> Int
$chashWithSalt :: Int -> PolicySourceType -> Int
Prelude.Hashable,
      PolicySourceType -> ()
(PolicySourceType -> ()) -> NFData PolicySourceType
forall a. (a -> ()) -> NFData a
rnf :: PolicySourceType -> ()
$crnf :: PolicySourceType -> ()
Prelude.NFData,
      Text -> Either String PolicySourceType
(Text -> Either String PolicySourceType)
-> FromText PolicySourceType
forall a. (Text -> Either String a) -> FromText a
fromText :: Text -> Either String PolicySourceType
$cfromText :: Text -> Either String PolicySourceType
Core.FromText,
      PolicySourceType -> Text
(PolicySourceType -> Text) -> ToText PolicySourceType
forall a. (a -> Text) -> ToText a
toText :: PolicySourceType -> Text
$ctoText :: PolicySourceType -> Text
Core.ToText,
      PolicySourceType -> ByteString
(PolicySourceType -> ByteString) -> ToByteString PolicySourceType
forall a. (a -> ByteString) -> ToByteString a
toBS :: PolicySourceType -> ByteString
$ctoBS :: PolicySourceType -> ByteString
Core.ToByteString,
      PolicySourceType -> ByteStringBuilder
(PolicySourceType -> ByteStringBuilder) -> ToLog PolicySourceType
forall a. (a -> ByteStringBuilder) -> ToLog a
build :: PolicySourceType -> ByteStringBuilder
$cbuild :: PolicySourceType -> ByteStringBuilder
Core.ToLog,
      HeaderName -> PolicySourceType -> [Header]
(HeaderName -> PolicySourceType -> [Header])
-> ToHeader PolicySourceType
forall a. (HeaderName -> a -> [Header]) -> ToHeader a
toHeader :: HeaderName -> PolicySourceType -> [Header]
$ctoHeader :: HeaderName -> PolicySourceType -> [Header]
Core.ToHeader,
      PolicySourceType -> QueryString
(PolicySourceType -> QueryString) -> ToQuery PolicySourceType
forall a. (a -> QueryString) -> ToQuery a
toQuery :: PolicySourceType -> QueryString
$ctoQuery :: PolicySourceType -> QueryString
Core.ToQuery,
      Value -> Parser [PolicySourceType]
Value -> Parser PolicySourceType
(Value -> Parser PolicySourceType)
-> (Value -> Parser [PolicySourceType])
-> FromJSON PolicySourceType
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
parseJSONList :: Value -> Parser [PolicySourceType]
$cparseJSONList :: Value -> Parser [PolicySourceType]
parseJSON :: Value -> Parser PolicySourceType
$cparseJSON :: Value -> Parser PolicySourceType
Core.FromJSON,
      FromJSONKeyFunction [PolicySourceType]
FromJSONKeyFunction PolicySourceType
FromJSONKeyFunction PolicySourceType
-> FromJSONKeyFunction [PolicySourceType]
-> FromJSONKey PolicySourceType
forall a.
FromJSONKeyFunction a -> FromJSONKeyFunction [a] -> FromJSONKey a
fromJSONKeyList :: FromJSONKeyFunction [PolicySourceType]
$cfromJSONKeyList :: FromJSONKeyFunction [PolicySourceType]
fromJSONKey :: FromJSONKeyFunction PolicySourceType
$cfromJSONKey :: FromJSONKeyFunction PolicySourceType
Core.FromJSONKey,
      [PolicySourceType] -> Encoding
[PolicySourceType] -> Value
PolicySourceType -> Encoding
PolicySourceType -> Value
(PolicySourceType -> Value)
-> (PolicySourceType -> Encoding)
-> ([PolicySourceType] -> Value)
-> ([PolicySourceType] -> Encoding)
-> ToJSON PolicySourceType
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [PolicySourceType] -> Encoding
$ctoEncodingList :: [PolicySourceType] -> Encoding
toJSONList :: [PolicySourceType] -> Value
$ctoJSONList :: [PolicySourceType] -> Value
toEncoding :: PolicySourceType -> Encoding
$ctoEncoding :: PolicySourceType -> Encoding
toJSON :: PolicySourceType -> Value
$ctoJSON :: PolicySourceType -> Value
Core.ToJSON,
      ToJSONKeyFunction [PolicySourceType]
ToJSONKeyFunction PolicySourceType
ToJSONKeyFunction PolicySourceType
-> ToJSONKeyFunction [PolicySourceType]
-> ToJSONKey PolicySourceType
forall a.
ToJSONKeyFunction a -> ToJSONKeyFunction [a] -> ToJSONKey a
toJSONKeyList :: ToJSONKeyFunction [PolicySourceType]
$ctoJSONKeyList :: ToJSONKeyFunction [PolicySourceType]
toJSONKey :: ToJSONKeyFunction PolicySourceType
$ctoJSONKey :: ToJSONKeyFunction PolicySourceType
Core.ToJSONKey,
      [Node] -> Either String PolicySourceType
([Node] -> Either String PolicySourceType)
-> FromXML PolicySourceType
forall a. ([Node] -> Either String a) -> FromXML a
parseXML :: [Node] -> Either String PolicySourceType
$cparseXML :: [Node] -> Either String PolicySourceType
Core.FromXML,
      PolicySourceType -> XML
(PolicySourceType -> XML) -> ToXML PolicySourceType
forall a. (a -> XML) -> ToXML a
toXML :: PolicySourceType -> XML
$ctoXML :: PolicySourceType -> XML
Core.ToXML
    )

pattern PolicySourceType_Aws_managed :: PolicySourceType
pattern $bPolicySourceType_Aws_managed :: PolicySourceType
$mPolicySourceType_Aws_managed :: forall r. PolicySourceType -> (Void# -> r) -> (Void# -> r) -> r
PolicySourceType_Aws_managed = PolicySourceType' "aws-managed"

pattern PolicySourceType_Group :: PolicySourceType
pattern $bPolicySourceType_Group :: PolicySourceType
$mPolicySourceType_Group :: forall r. PolicySourceType -> (Void# -> r) -> (Void# -> r) -> r
PolicySourceType_Group = PolicySourceType' "group"

pattern PolicySourceType_None :: PolicySourceType
pattern $bPolicySourceType_None :: PolicySourceType
$mPolicySourceType_None :: forall r. PolicySourceType -> (Void# -> r) -> (Void# -> r) -> r
PolicySourceType_None = PolicySourceType' "none"

pattern PolicySourceType_Resource :: PolicySourceType
pattern $bPolicySourceType_Resource :: PolicySourceType
$mPolicySourceType_Resource :: forall r. PolicySourceType -> (Void# -> r) -> (Void# -> r) -> r
PolicySourceType_Resource = PolicySourceType' "resource"

pattern PolicySourceType_Role :: PolicySourceType
pattern $bPolicySourceType_Role :: PolicySourceType
$mPolicySourceType_Role :: forall r. PolicySourceType -> (Void# -> r) -> (Void# -> r) -> r
PolicySourceType_Role = PolicySourceType' "role"

pattern PolicySourceType_User :: PolicySourceType
pattern $bPolicySourceType_User :: PolicySourceType
$mPolicySourceType_User :: forall r. PolicySourceType -> (Void# -> r) -> (Void# -> r) -> r
PolicySourceType_User = PolicySourceType' "user"

pattern PolicySourceType_User_managed :: PolicySourceType
pattern $bPolicySourceType_User_managed :: PolicySourceType
$mPolicySourceType_User_managed :: forall r. PolicySourceType -> (Void# -> r) -> (Void# -> r) -> r
PolicySourceType_User_managed = PolicySourceType' "user-managed"

{-# COMPLETE
  PolicySourceType_Aws_managed,
  PolicySourceType_Group,
  PolicySourceType_None,
  PolicySourceType_Resource,
  PolicySourceType_Role,
  PolicySourceType_User,
  PolicySourceType_User_managed,
  PolicySourceType'
  #-}