content: module Aws.Ses.Commands.GetIdentityVerificationAttributes
      ( GetIdentityVerificationAttributes(..)
      , GetIdentityVerificationAttributesResponse(..)
      , IdentityVerificationAttributes(..)
      ) where
  
  import Data.Text (Text)
  import qualified Data.ByteString.Char8 as BS
  import Data.Maybe (listToMaybe)
  import Control.Applicative
  import Data.Text.Encoding as T (encodeUtf8)
  import Data.Typeable
  import Text.XML.Cursor (($//), ($/), (&|), laxElement)
  import Prelude
  
  import Aws.Core
  import Aws.Ses.Core
  
  -- | Get verification status for a list of email addresses and/or domains
  data GetIdentityVerificationAttributes = GetIdentityVerificationAttributes [Text]
      deriving (Eq, Ord, Show, Typeable)
  
  
  -- | ServiceConfiguration: 'SesConfiguration'
  instance SignQuery GetIdentityVerificationAttributes where
      type ServiceConfiguration GetIdentityVerificationAttributes = SesConfiguration
      signQuery (GetIdentityVerificationAttributes identities) =
          sesSignQuery $ ("Action", "GetIdentityVerificationAttributes")
                       : zip (enumMember <$> [1..]) (T.encodeUtf8 <$> identities)
              where enumMember (n :: Int) = BS.append "Identities.member." (BS.pack $ show n)
  
  data IdentityVerificationAttributes = IdentityVerificationAttributes
      { ivIdentity :: Text
      , ivVerificationStatus :: Text
      , ivVerificationToken :: Maybe Text
      }
      deriving (Eq, Ord, Show, Typeable)
  
  
  -- | The response sent back by Amazon SES after a
  -- 'GetIdentityVerificationAttributes' command.
  data GetIdentityVerificationAttributesResponse =
      GetIdentityVerificationAttributesResponse [IdentityVerificationAttributes]
      deriving (Eq, Ord, Show, Typeable)
  
  
  instance ResponseConsumer GetIdentityVerificationAttributes GetIdentityVerificationAttributesResponse where
      type ResponseMetadata GetIdentityVerificationAttributesResponse = SesMetadata
      responseConsumer _ _ =
        sesResponseConsumer $ \cursor -> do
           let buildAttr e = do
                 ivIdentity <- force "Missing Key" $ e $/ elContent "key"
                 ivVerificationStatus <- force "Missing Verification Status" $ e
                     $// elContent "VerificationStatus"
                 let ivVerificationToken = listToMaybe $ e $// elContent "VerificationToken"
                 return IdentityVerificationAttributes {..}
           attributes <- sequence $ cursor $// laxElement "entry" &| buildAttr
           return $ GetIdentityVerificationAttributesResponse attributes
  
  
  instance Transaction GetIdentityVerificationAttributes GetIdentityVerificationAttributesResponse where
  
  instance AsMemoryResponse GetIdentityVerificationAttributesResponse where
      type MemoryResponse GetIdentityVerificationAttributesResponse = GetIdentityVerificationAttributesResponse
      loadToMemory = return
  