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 (<||>) #-}