module Aws.Lambda.Utilities ( toJSONText, tshow, decodeObj, ) where import qualified Aws.Lambda.Runtime.Error as Error import Data.Aeson (FromJSON, ToJSON, eitherDecode, encode) import qualified Data.ByteString.Lazy.Char8 as LazyByteString import Data.Text (Text, pack) import qualified Data.Text as T import qualified Data.Text.Encoding as T import Data.Typeable (Proxy (..), Typeable, typeRep) toJSONText :: ToJSON a => a -> Text toJSONText = T.decodeUtf8 . LazyByteString.toStrict . encode tshow :: Show a => a -> Text tshow = T.pack . show -- | Helper function that the dispatcher will use to -- decode the JSON that comes as an AWS Lambda event into the -- appropriate type expected by the handler. decodeObj :: forall a. (FromJSON a, Typeable a) => LazyByteString.ByteString -> Either Error.Parsing a decodeObj x = let objName = pack . show $ typeRep (Proxy :: Proxy a) in case eitherDecode x of Left e -> Left $ Error.Parsing (pack e) (pack . LazyByteString.unpack $ x) objName Right v -> return v