graphql-engine/server/src-lib/Hasura/RQL/DDL/FeatureFlag.hs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

51 lines
1.7 KiB
Haskell
Raw Normal View History

-- | 'get_feature_flag' Metadata API action. Given a feature flag
-- identifier, it returns the value of the flag and its description.
module Hasura.RQL.DDL.FeatureFlag
( -- * Get Feature Flag
GetFeatureFlag (..),
runGetFeatureFlag,
)
where
--------------------------------------------------------------------------------
import Data.Aeson (FromJSON, (.:), (.=))
import Data.Aeson qualified as Aeson
import Data.HashMap.Strict qualified as HashMap
import Hasura.Base.Error qualified as Error
import Hasura.EncJSON (EncJSON)
import Hasura.EncJSON qualified as EncJSON
import Hasura.Prelude
import Hasura.Server.Init.FeatureFlag qualified as FeatureFlag
import Hasura.Server.Types qualified as Types
--------------------------------------------------------------------------------
newtype GetFeatureFlag = GetFeatureFlag {gfgIdentifier :: Text}
instance FromJSON GetFeatureFlag where
parseJSON = Aeson.withObject "GetFeatureFlag" \o -> do
gfgIdentifier <- o .: "identifier"
pure $ GetFeatureFlag {..}
runGetFeatureFlag ::
( MonadError Error.QErr m,
MonadIO m
) =>
2023-04-04 18:59:58 +03:00
Types.CheckFeatureFlag ->
GetFeatureFlag ->
m EncJSON
2023-04-04 18:59:58 +03:00
runGetFeatureFlag (Types.CheckFeatureFlag getFeatureFlag) GetFeatureFlag {..} = do
let flagM = HashMap.lookup gfgIdentifier $ FeatureFlag.getFeatureFlags $ FeatureFlag.featureFlags
case flagM of
Nothing -> Error.throw400 Error.NotFound $ "Feature Flag '" <> gfgIdentifier <> "' not found"
Just flag -> do
flagValue <- liftIO $ getFeatureFlag flag
pure $
EncJSON.encJFromJValue $
Aeson.object
[ "identifier" .= gfgIdentifier,
"value" .= flagValue,
"description" .= FeatureFlag.ffDescription flag
]