{-# LANGUAGE CPP                        #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings          #-}
{-# LANGUAGE StandaloneDeriving         #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module AWSLambda.Orphans where

import           Data.Aeson
import           Data.Monoid           ((<>))
import qualified Data.Text             as Text
import           Network.AWS.Data.Text (fromText)
import qualified Network.AWS.S3        as S3

#if !MIN_VERSION_amazonka_core(1,6,0)
deriving instance FromJSON S3.BucketName
#endif

deriving instance FromJSON S3.ObjectKey

deriving instance FromJSON S3.ObjectVersionId

instance FromJSON S3.ETag where
  parseJSON :: Value -> Parser ETag
parseJSON = String -> (Text -> Parser ETag) -> Value -> Parser ETag
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"ETag" ((Text -> Parser ETag) -> Value -> Parser ETag)
-> (Text -> Parser ETag) -> Value -> Parser ETag
forall a b. (a -> b) -> a -> b
$ (String -> Parser ETag)
-> (ETag -> Parser ETag) -> Either String ETag -> Parser ETag
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either String -> Parser ETag
forall (m :: * -> *) a. MonadFail m => String -> m a
fail ETag -> Parser ETag
forall (m :: * -> *) a. Monad m => a -> m a
return (Either String ETag -> Parser ETag)
-> (Text -> Either String ETag) -> Text -> Parser ETag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Either String ETag
forall a. FromText a => Text -> Either String a
fromText

instance FromJSON S3.Event where
  parseJSON :: Value -> Parser Event
parseJSON = String -> (Text -> Parser Event) -> Value -> Parser Event
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"Event" ((Text -> Parser Event) -> Value -> Parser Event)
-> (Text -> Parser Event) -> Value -> Parser Event
forall a b. (a -> b) -> a -> b
$ (String -> Parser Event)
-> (Event -> Parser Event) -> Either String Event -> Parser Event
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either String -> Parser Event
forall (m :: * -> *) a. MonadFail m => String -> m a
fail Event -> Parser Event
forall (m :: * -> *) a. Monad m => a -> m a
return (Either String Event -> Parser Event)
-> (Text -> Either String Event) -> Text -> Parser Event
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Either String Event
forall a. FromText a => Text -> Either String a
fromText (Text -> Either String Event)
-> (Text -> Text) -> Text -> Either String Event
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text
addS3Prefix
    where
      s3Prefix :: Text
s3Prefix = Text
"s3:"
      addS3Prefix :: Text -> Text
addS3Prefix Text
s =
        if Text
s3Prefix Text -> Text -> Bool
`Text.isPrefixOf` Text
s
          then Text
s
          else Text
s3Prefix Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
s