{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_HADDOCK show-extensions #-}

-- |
--
-- Module      : Network.AWS.ARN.Lambda
-- Copyright   : (C) 2020-2022 Bellroy Pty Ltd
-- License     : BSD-3-Clause
-- Maintainer  : Bellroy Tech Team <haskell@bellroy.com>
-- Stability   : experimental
module Network.AWS.ARN.Lambda
  ( -- * Functions
    Function (..),
    parseFunction,
    renderFunction,

    -- ** Prisms
    _Function,
  )
where

import Data.Hashable (Hashable)
import Data.Maybe (maybeToList)
import Data.Text (Text)
import qualified Data.Text as T
import GHC.Generics (Generic)
import Network.AWS.ARN.Internal.Lens (Prism', prism')

-- $setup
-- >>> :set -XOverloadedStrings
-- >>> import Network.AWS.ARN.Internal.Lens ((^?))

-- | An AWS Lambda function name, and optional alias/version qualifier.
--
-- >>> "function:helloworld" ^? _Function
-- Just (Function {name = "helloworld", qualifier = Nothing})
--
-- >>> "function:helloworld:$LATEST" ^? _Function
-- Just (Function {name = "helloworld", qualifier = Just "$LATEST"})
--
-- >>> "function:helloworld:42" ^? _Function
-- Just (Function {name = "helloworld", qualifier = Just "42"})
--
-- @since 0.2.0.0
data Function = Function
  { Function -> Text
name :: Text,
    Function -> Maybe Text
qualifier :: Maybe Text
  }
  deriving (Function -> Function -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Function -> Function -> Bool
$c/= :: Function -> Function -> Bool
== :: Function -> Function -> Bool
$c== :: Function -> Function -> Bool
Eq, Eq Function
Function -> Function -> Bool
Function -> Function -> Ordering
Function -> Function -> Function
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Function -> Function -> Function
$cmin :: Function -> Function -> Function
max :: Function -> Function -> Function
$cmax :: Function -> Function -> Function
>= :: Function -> Function -> Bool
$c>= :: Function -> Function -> Bool
> :: Function -> Function -> Bool
$c> :: Function -> Function -> Bool
<= :: Function -> Function -> Bool
$c<= :: Function -> Function -> Bool
< :: Function -> Function -> Bool
$c< :: Function -> Function -> Bool
compare :: Function -> Function -> Ordering
$ccompare :: Function -> Function -> Ordering
Ord, Eq Function
Int -> Function -> Int
Function -> Int
forall a. Eq a -> (Int -> a -> Int) -> (a -> Int) -> Hashable a
hash :: Function -> Int
$chash :: Function -> Int
hashWithSalt :: Int -> Function -> Int
$chashWithSalt :: Int -> Function -> Int
Hashable, Int -> Function -> ShowS
[Function] -> ShowS
Function -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Function] -> ShowS
$cshowList :: [Function] -> ShowS
show :: Function -> String
$cshow :: Function -> String
showsPrec :: Int -> Function -> ShowS
$cshowsPrec :: Int -> Function -> ShowS
Show, forall x. Rep Function x -> Function
forall x. Function -> Rep Function x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Function x -> Function
$cfrom :: forall x. Function -> Rep Function x
Generic)

-- | @since 0.2.0.0
parseFunction :: Text -> Maybe Function
parseFunction :: Text -> Maybe Function
parseFunction Text
t = case Text -> Text -> [Text]
T.splitOn Text
":" Text
t of
  (Text
"function" : Text
nam : [Text]
qual) ->
    forall a. a -> Maybe a
Just (Text -> Maybe Text -> Function
Function Text
nam) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> case [Text]
qual of
      [Text
q] -> forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ forall a. a -> Maybe a
Just Text
q
      [] -> forall a. a -> Maybe a
Just forall a. Maybe a
Nothing
      [Text]
_ -> forall a. Maybe a
Nothing
  [Text]
_ -> forall a. Maybe a
Nothing

-- | @since 0.2.0.0
renderFunction :: Function -> Text
renderFunction :: Function -> Text
renderFunction Function
f =
  Text -> [Text] -> Text
T.intercalate Text
":" forall a b. (a -> b) -> a -> b
$
    [Text
"function", Function -> Text
name Function
f] forall a. [a] -> [a] -> [a]
++ forall a. Maybe a -> [a]
maybeToList (Function -> Maybe Text
qualifier Function
f)

-- | @since 0.1.0.0
_Function :: Prism' Text Function
_Function :: Prism' Text Function
_Function = forall s a. (a -> s) -> (s -> Maybe a) -> Prism' s a
prism' Function -> Text
renderFunction Text -> Maybe Function
parseFunction