aws-arn-0.3.3.0: src/Network/AWS/ARN/States.hs
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
module Network.AWS.ARN.States
( StateMachine (..),
parseStateMachine,
renderStateMachine,
_StateMachine,
)
where
import Data.Hashable (Hashable)
import Data.Maybe (maybeToList)
import Data.Text (Text)
import qualified Data.Text as T
import GHC.Generics (Generic)
import Lens.Micro.Pro (Prism', prism')
-- $setup
-- >>> :set -XOverloadedStrings
-- >>> import Lens.Micro.Pro ((^?))
-- | An AWS State Machine, made of its name and optional qualifier.
--
-- >>> "stateMachine:orderProcessor" ^? _StateMachine
-- Just (StateMachine {name = "orderProcessor", qualifier = Nothing})
--
-- >>> "stateMachine:orderProcessor:v2" ^? _StateMachine
-- Just (StateMachine {name = "orderProcessor", qualifier = Just "v2"})
--
-- @since 0.3.3.0
data StateMachine = StateMachine
{ name :: Text
, qualifier :: Maybe Text
}
deriving (Eq, Ord, Hashable, Show, Generic)
-- | @since 0.3.3.0
parseStateMachine :: Text -> Maybe StateMachine
parseStateMachine t = case T.splitOn ":" t of
("stateMachine" : nam : qual) ->
Just (StateMachine nam) <*> case qual of
[q] -> Just $ Just q
[] -> Just Nothing
_ -> Nothing
_ -> Nothing
-- | @since 0.3.3.0
renderStateMachine :: StateMachine -> Text
renderStateMachine s =
T.intercalate ":" $
["stateMachine", name s] ++ maybeToList (qualifier s)
-- | @since 0.3.3.0
_StateMachine :: Prism' Text StateMachine
_StateMachine = prism' renderStateMachine parseStateMachine