{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric      #-}
{-# LANGUAGE LambdaCase         #-}
{-# LANGUAGE OverloadedStrings  #-}

{-# OPTIONS_GHC -fno-warn-unused-imports #-}

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

-- |
-- Module      : Network.AWS.IAM.Types.Sum
-- Copyright   : (c) 2013-2016 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
module Network.AWS.IAM.Types.Sum where

import           Network.AWS.Prelude

data AssignmentStatusType
    = Any
    | Assigned
    | Unassigned
    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)

instance FromText AssignmentStatusType where
    parser = takeLowerText >>= \case
        "any" -> pure Any
        "assigned" -> pure Assigned
        "unassigned" -> pure Unassigned
        e -> fromTextError $ "Failure parsing AssignmentStatusType from value: '" <> e
           <> "'. Accepted values: Any, Assigned, Unassigned"

instance ToText AssignmentStatusType where
    toText = \case
        Any -> "Any"
        Assigned -> "Assigned"
        Unassigned -> "Unassigned"

instance Hashable     AssignmentStatusType
instance NFData       AssignmentStatusType
instance ToByteString AssignmentStatusType
instance ToQuery      AssignmentStatusType
instance ToHeader     AssignmentStatusType

data ContextKeyTypeEnum
    = Binary
    | BinaryList
    | Boolean
    | BooleanList
    | Date
    | DateList
    | IP
    | IPList
    | Numeric
    | NumericList
    | String
    | StringList
    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)

instance FromText ContextKeyTypeEnum where
    parser = takeLowerText >>= \case
        "binary" -> pure Binary
        "binarylist" -> pure BinaryList
        "boolean" -> pure Boolean
        "booleanlist" -> pure BooleanList
        "date" -> pure Date
        "datelist" -> pure DateList
        "ip" -> pure IP
        "iplist" -> pure IPList
        "numeric" -> pure Numeric
        "numericlist" -> pure NumericList
        "string" -> pure String
        "stringlist" -> pure StringList
        e -> fromTextError $ "Failure parsing ContextKeyTypeEnum from value: '" <> e
           <> "'. Accepted values: binary, binaryList, boolean, booleanList, date, dateList, ip, ipList, numeric, numericList, string, stringList"

instance ToText ContextKeyTypeEnum where
    toText = \case
        Binary -> "binary"
        BinaryList -> "binaryList"
        Boolean -> "boolean"
        BooleanList -> "booleanList"
        Date -> "date"
        DateList -> "dateList"
        IP -> "ip"
        IPList -> "ipList"
        Numeric -> "numeric"
        NumericList -> "numericList"
        String -> "string"
        StringList -> "stringList"

instance Hashable     ContextKeyTypeEnum
instance NFData       ContextKeyTypeEnum
instance ToByteString ContextKeyTypeEnum
instance ToQuery      ContextKeyTypeEnum
instance ToHeader     ContextKeyTypeEnum

data EncodingType
    = Pem
    | SSH
    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)

instance FromText EncodingType where
    parser = takeLowerText >>= \case
        "pem" -> pure Pem
        "ssh" -> pure SSH
        e -> fromTextError $ "Failure parsing EncodingType from value: '" <> e
           <> "'. Accepted values: PEM, SSH"

instance ToText EncodingType where
    toText = \case
        Pem -> "PEM"
        SSH -> "SSH"

instance Hashable     EncodingType
instance NFData       EncodingType
instance ToByteString EncodingType
instance ToQuery      EncodingType
instance ToHeader     EncodingType

data EntityType
    = ETAWSManagedPolicy
    | ETGroup
    | ETLocalManagedPolicy
    | ETRole
    | ETUser
    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)

instance FromText EntityType where
    parser = takeLowerText >>= \case
        "awsmanagedpolicy" -> pure ETAWSManagedPolicy
        "group" -> pure ETGroup
        "localmanagedpolicy" -> pure ETLocalManagedPolicy
        "role" -> pure ETRole
        "user" -> pure ETUser
        e -> fromTextError $ "Failure parsing EntityType from value: '" <> e
           <> "'. Accepted values: AWSManagedPolicy, Group, LocalManagedPolicy, Role, User"

instance ToText EntityType where
    toText = \case
        ETAWSManagedPolicy -> "AWSManagedPolicy"
        ETGroup -> "Group"
        ETLocalManagedPolicy -> "LocalManagedPolicy"
        ETRole -> "Role"
        ETUser -> "User"

instance Hashable     EntityType
instance NFData       EntityType
instance ToByteString EntityType
instance ToQuery      EntityType
instance ToHeader     EntityType

data PolicyEvaluationDecisionType
    = Allowed
    | ExplicitDeny
    | ImplicitDeny
    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)

instance FromText PolicyEvaluationDecisionType where
    parser = takeLowerText >>= \case
        "allowed" -> pure Allowed
        "explicitdeny" -> pure ExplicitDeny
        "implicitdeny" -> pure ImplicitDeny
        e -> fromTextError $ "Failure parsing PolicyEvaluationDecisionType from value: '" <> e
           <> "'. Accepted values: allowed, explicitDeny, implicitDeny"

instance ToText PolicyEvaluationDecisionType where
    toText = \case
        Allowed -> "allowed"
        ExplicitDeny -> "explicitDeny"
        ImplicitDeny -> "implicitDeny"

instance Hashable     PolicyEvaluationDecisionType
instance NFData       PolicyEvaluationDecisionType
instance ToByteString PolicyEvaluationDecisionType
instance ToQuery      PolicyEvaluationDecisionType
instance ToHeader     PolicyEvaluationDecisionType

instance FromXML PolicyEvaluationDecisionType where
    parseXML = parseXMLText "PolicyEvaluationDecisionType"

data PolicyScopeType
    = AWS
    | All
    | Local
    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)

instance FromText PolicyScopeType where
    parser = takeLowerText >>= \case
        "aws" -> pure AWS
        "all" -> pure All
        "local" -> pure Local
        e -> fromTextError $ "Failure parsing PolicyScopeType from value: '" <> e
           <> "'. Accepted values: AWS, All, Local"

instance ToText PolicyScopeType where
    toText = \case
        AWS -> "AWS"
        All -> "All"
        Local -> "Local"

instance Hashable     PolicyScopeType
instance NFData       PolicyScopeType
instance ToByteString PolicyScopeType
instance ToQuery      PolicyScopeType
instance ToHeader     PolicyScopeType

data PolicySourceType
    = AWSManaged
    | Group
    | None
    | Resource
    | Role
    | User
    | UserManaged
    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)

instance FromText PolicySourceType where
    parser = takeLowerText >>= \case
        "aws-managed" -> pure AWSManaged
        "group" -> pure Group
        "none" -> pure None
        "resource" -> pure Resource
        "role" -> pure Role
        "user" -> pure User
        "user-managed" -> pure UserManaged
        e -> fromTextError $ "Failure parsing PolicySourceType from value: '" <> e
           <> "'. Accepted values: aws-managed, group, none, resource, role, user, user-managed"

instance ToText PolicySourceType where
    toText = \case
        AWSManaged -> "aws-managed"
        Group -> "group"
        None -> "none"
        Resource -> "resource"
        Role -> "role"
        User -> "user"
        UserManaged -> "user-managed"

instance Hashable     PolicySourceType
instance NFData       PolicySourceType
instance ToByteString PolicySourceType
instance ToQuery      PolicySourceType
instance ToHeader     PolicySourceType

instance FromXML PolicySourceType where
    parseXML = parseXMLText "PolicySourceType"

data ReportFormatType =
    TextCSV
    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)

instance FromText ReportFormatType where
    parser = takeLowerText >>= \case
        "text/csv" -> pure TextCSV
        e -> fromTextError $ "Failure parsing ReportFormatType from value: '" <> e
           <> "'. Accepted values: text/csv"

instance ToText ReportFormatType where
    toText = \case
        TextCSV -> "text/csv"

instance Hashable     ReportFormatType
instance NFData       ReportFormatType
instance ToByteString ReportFormatType
instance ToQuery      ReportFormatType
instance ToHeader     ReportFormatType

instance FromXML ReportFormatType where
    parseXML = parseXMLText "ReportFormatType"

data ReportStateType
    = Complete
    | Inprogress
    | Started
    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)

instance FromText ReportStateType where
    parser = takeLowerText >>= \case
        "complete" -> pure Complete
        "inprogress" -> pure Inprogress
        "started" -> pure Started
        e -> fromTextError $ "Failure parsing ReportStateType from value: '" <> e
           <> "'. Accepted values: COMPLETE, INPROGRESS, STARTED"

instance ToText ReportStateType where
    toText = \case
        Complete -> "COMPLETE"
        Inprogress -> "INPROGRESS"
        Started -> "STARTED"

instance Hashable     ReportStateType
instance NFData       ReportStateType
instance ToByteString ReportStateType
instance ToQuery      ReportStateType
instance ToHeader     ReportStateType

instance FromXML ReportStateType where
    parseXML = parseXMLText "ReportStateType"

data StatusType
    = Active
    | Inactive
    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)

instance FromText StatusType where
    parser = takeLowerText >>= \case
        "active" -> pure Active
        "inactive" -> pure Inactive
        e -> fromTextError $ "Failure parsing StatusType from value: '" <> e
           <> "'. Accepted values: Active, Inactive"

instance ToText StatusType where
    toText = \case
        Active -> "Active"
        Inactive -> "Inactive"

instance Hashable     StatusType
instance NFData       StatusType
instance ToByteString StatusType
instance ToQuery      StatusType
instance ToHeader     StatusType

instance FromXML StatusType where
    parseXML = parseXMLText "StatusType"

data SummaryKeyType
    = AccessKeysPerUserQuota
    | AccountAccessKeysPresent
    | AccountMFAEnabled
    | AccountSigningCertificatesPresent
    | AttachedPoliciesPerGroupQuota
    | AttachedPoliciesPerRoleQuota
    | AttachedPoliciesPerUserQuota
    | GroupPolicySizeQuota
    | Groups
    | GroupsPerUserQuota
    | GroupsQuota
    | MFADevices
    | MFADevicesInUse
    | Policies
    | PoliciesQuota
    | PolicySizeQuota
    | PolicyVersionsInUse
    | PolicyVersionsInUseQuota
    | ServerCertificates
    | ServerCertificatesQuota
    | SigningCertificatesPerUserQuota
    | UserPolicySizeQuota
    | Users
    | UsersQuota
    | VersionsPerPolicyQuota
    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)

instance FromText SummaryKeyType where
    parser = takeLowerText >>= \case
        "accesskeysperuserquota" -> pure AccessKeysPerUserQuota
        "accountaccesskeyspresent" -> pure AccountAccessKeysPresent
        "accountmfaenabled" -> pure AccountMFAEnabled
        "accountsigningcertificatespresent" -> pure AccountSigningCertificatesPresent
        "attachedpoliciespergroupquota" -> pure AttachedPoliciesPerGroupQuota
        "attachedpoliciesperrolequota" -> pure AttachedPoliciesPerRoleQuota
        "attachedpoliciesperuserquota" -> pure AttachedPoliciesPerUserQuota
        "grouppolicysizequota" -> pure GroupPolicySizeQuota
        "groups" -> pure Groups
        "groupsperuserquota" -> pure GroupsPerUserQuota
        "groupsquota" -> pure GroupsQuota
        "mfadevices" -> pure MFADevices
        "mfadevicesinuse" -> pure MFADevicesInUse
        "policies" -> pure Policies
        "policiesquota" -> pure PoliciesQuota
        "policysizequota" -> pure PolicySizeQuota
        "policyversionsinuse" -> pure PolicyVersionsInUse
        "policyversionsinusequota" -> pure PolicyVersionsInUseQuota
        "servercertificates" -> pure ServerCertificates
        "servercertificatesquota" -> pure ServerCertificatesQuota
        "signingcertificatesperuserquota" -> pure SigningCertificatesPerUserQuota
        "userpolicysizequota" -> pure UserPolicySizeQuota
        "users" -> pure Users
        "usersquota" -> pure UsersQuota
        "versionsperpolicyquota" -> pure VersionsPerPolicyQuota
        e -> fromTextError $ "Failure parsing SummaryKeyType from value: '" <> e
           <> "'. Accepted values: AccessKeysPerUserQuota, AccountAccessKeysPresent, AccountMFAEnabled, AccountSigningCertificatesPresent, AttachedPoliciesPerGroupQuota, AttachedPoliciesPerRoleQuota, AttachedPoliciesPerUserQuota, GroupPolicySizeQuota, Groups, GroupsPerUserQuota, GroupsQuota, MFADevices, MFADevicesInUse, Policies, PoliciesQuota, PolicySizeQuota, PolicyVersionsInUse, PolicyVersionsInUseQuota, ServerCertificates, ServerCertificatesQuota, SigningCertificatesPerUserQuota, UserPolicySizeQuota, Users, UsersQuota, VersionsPerPolicyQuota"

instance ToText SummaryKeyType where
    toText = \case
        AccessKeysPerUserQuota -> "AccessKeysPerUserQuota"
        AccountAccessKeysPresent -> "AccountAccessKeysPresent"
        AccountMFAEnabled -> "AccountMFAEnabled"
        AccountSigningCertificatesPresent -> "AccountSigningCertificatesPresent"
        AttachedPoliciesPerGroupQuota -> "AttachedPoliciesPerGroupQuota"
        AttachedPoliciesPerRoleQuota -> "AttachedPoliciesPerRoleQuota"
        AttachedPoliciesPerUserQuota -> "AttachedPoliciesPerUserQuota"
        GroupPolicySizeQuota -> "GroupPolicySizeQuota"
        Groups -> "Groups"
        GroupsPerUserQuota -> "GroupsPerUserQuota"
        GroupsQuota -> "GroupsQuota"
        MFADevices -> "MFADevices"
        MFADevicesInUse -> "MFADevicesInUse"
        Policies -> "Policies"
        PoliciesQuota -> "PoliciesQuota"
        PolicySizeQuota -> "PolicySizeQuota"
        PolicyVersionsInUse -> "PolicyVersionsInUse"
        PolicyVersionsInUseQuota -> "PolicyVersionsInUseQuota"
        ServerCertificates -> "ServerCertificates"
        ServerCertificatesQuota -> "ServerCertificatesQuota"
        SigningCertificatesPerUserQuota -> "SigningCertificatesPerUserQuota"
        UserPolicySizeQuota -> "UserPolicySizeQuota"
        Users -> "Users"
        UsersQuota -> "UsersQuota"
        VersionsPerPolicyQuota -> "VersionsPerPolicyQuota"

instance Hashable     SummaryKeyType
instance NFData       SummaryKeyType
instance ToByteString SummaryKeyType
instance ToQuery      SummaryKeyType
instance ToHeader     SummaryKeyType

instance FromXML SummaryKeyType where
    parseXML = parseXMLText "SummaryKeyType"