packages feed

azure-functions-worker-0.0.0.0: src/Azure/Functions/Bindings/Shared.hs

{-# LANGUAGE DeriveGeneric              #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase                 #-}
module Azure.Functions.Bindings.Shared
where

import           Control.Applicative      (Alternative, (<|>))
import           Data.Aeson               (FromJSON, decodeStrict')
import           Data.ByteString          (ByteString)
import           Data.String              (IsString)
import           Data.Text                (Text)
import qualified Data.Text.Encoding       as Text
import           GHC.Generics             (Generic)
import           Lens.Family              ((^.))
import           Proto.FunctionRpc
import           Proto.FunctionRpc_Fields

newtype ConnectionName  = ConnectionName Text deriving (Show, Eq, IsString, Generic)

decodeJson :: FromJSON a => TypedData -> Maybe a
decodeJson d =
  d ^. maybe'json >>= decodeStrict' . Text.encodeUtf8
{-# INLINE decodeJson #-}

getText :: TypedData -> Maybe Text
getText d =
  d ^. maybe'data' >>= \case
    TypedData'String v  -> Just v
    TypedData'Json v    -> Just v
    _                   -> Nothing

getBytes :: TypedData -> Maybe ByteString
getBytes td =
  td ^. maybe'data' >>= \case
    TypedData'Bytes v  -> Just v
    TypedData'Stream v -> Just v
    _                  -> Nothing

infixl 3 <||>
(<||>) :: Alternative f => (a -> f x) -> (a -> f x) -> a -> f x
f <||> g = \a -> f a <|> g a
{-# INLINE (<||>) #-}