module Network.AWS.KMS.Types.Sum where
import           Network.AWS.Prelude
data DataKeySpec
    = AES128
    | AES256
    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
instance FromText DataKeySpec where
    parser = takeLowerText >>= \case
        "aes_128" -> pure AES128
        "aes_256" -> pure AES256
        e -> fromTextError $ "Failure parsing DataKeySpec from value: '" <> e
           <> "'. Accepted values: aes_128, aes_256"
instance ToText DataKeySpec where
    toText = \case
        AES128 -> "aes_128"
        AES256 -> "aes_256"
instance Hashable     DataKeySpec
instance ToByteString DataKeySpec
instance ToQuery      DataKeySpec
instance ToHeader     DataKeySpec
instance ToJSON DataKeySpec where
    toJSON = toJSONText
data GrantOperation
    = CreateGrant
    | Decrypt
    | Encrypt
    | GenerateDataKey
    | GenerateDataKeyWithoutPlaintext
    | ReEncryptFrom
    | ReEncryptTo
    | RetireGrant
    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
instance FromText GrantOperation where
    parser = takeLowerText >>= \case
        "creategrant" -> pure CreateGrant
        "decrypt" -> pure Decrypt
        "encrypt" -> pure Encrypt
        "generatedatakey" -> pure GenerateDataKey
        "generatedatakeywithoutplaintext" -> pure GenerateDataKeyWithoutPlaintext
        "reencryptfrom" -> pure ReEncryptFrom
        "reencryptto" -> pure ReEncryptTo
        "retiregrant" -> pure RetireGrant
        e -> fromTextError $ "Failure parsing GrantOperation from value: '" <> e
           <> "'. Accepted values: creategrant, decrypt, encrypt, generatedatakey, generatedatakeywithoutplaintext, reencryptfrom, reencryptto, retiregrant"
instance ToText GrantOperation where
    toText = \case
        CreateGrant -> "creategrant"
        Decrypt -> "decrypt"
        Encrypt -> "encrypt"
        GenerateDataKey -> "generatedatakey"
        GenerateDataKeyWithoutPlaintext -> "generatedatakeywithoutplaintext"
        ReEncryptFrom -> "reencryptfrom"
        ReEncryptTo -> "reencryptto"
        RetireGrant -> "retiregrant"
instance Hashable     GrantOperation
instance ToByteString GrantOperation
instance ToQuery      GrantOperation
instance ToHeader     GrantOperation
instance ToJSON GrantOperation where
    toJSON = toJSONText
instance FromJSON GrantOperation where
    parseJSON = parseJSONText "GrantOperation"
data KeyUsageType =
    EncryptDecrypt
    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
instance FromText KeyUsageType where
    parser = takeLowerText >>= \case
        "encrypt_decrypt" -> pure EncryptDecrypt
        e -> fromTextError $ "Failure parsing KeyUsageType from value: '" <> e
           <> "'. Accepted values: encrypt_decrypt"
instance ToText KeyUsageType where
    toText = \case
        EncryptDecrypt -> "encrypt_decrypt"
instance Hashable     KeyUsageType
instance ToByteString KeyUsageType
instance ToQuery      KeyUsageType
instance ToHeader     KeyUsageType
instance ToJSON KeyUsageType where
    toJSON = toJSONText
instance FromJSON KeyUsageType where
    parseJSON = parseJSONText "KeyUsageType"