Skip to content

Commit

Permalink
New functions queryExpr_, determineEraExpr_ and getNtcVersion_ which …
Browse files Browse the repository at this point in the history
…are oops versions of other functions with the same name without the underscore.
  • Loading branch information
newhoggy committed Mar 31, 2023
1 parent 786ca7e commit ad44dad
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 0 deletions.
3 changes: 3 additions & 0 deletions cardano-api/src/Cardano/Api.hs
Expand Up @@ -659,6 +659,7 @@ module Cardano.Api (

UnsupportedNtcVersionError(..),

MinNodeToClientVersion,
AcquireFailure(..),

-- *** Local tx monitoring
Expand Down Expand Up @@ -750,7 +751,9 @@ module Cardano.Api (
executeLocalStateQueryExpr,
executeLocalStateQueryExpr_,
queryExpr,
queryExpr_,
determineEraExpr,
determineEraExpr_,

chainPointToSlotNo,
chainPointToHeaderHash,
Expand Down
2 changes: 2 additions & 0 deletions cardano-api/src/Cardano/Api/IPC.hs
Expand Up @@ -82,6 +82,8 @@ module Cardano.Api.IPC (

UnsupportedNtcVersionError(..),

MinNodeToClientVersion,

-- ** Error types
AcquireFailure(..),
) where
Expand Down
31 changes: 31 additions & 0 deletions cardano-api/src/Cardano/Api/IPC/Monad.hs
Expand Up @@ -11,7 +11,9 @@ module Cardano.Api.IPC.Monad
, executeLocalStateQueryExpr
, executeLocalStateQueryExpr_
, queryExpr
, queryExpr_
, determineEraExpr
, determineEraExpr_

, NodeToClientVersionOf (..)
) where
Expand Down Expand Up @@ -143,3 +145,32 @@ determineEraExpr cModeParams = runExceptT $
ByronMode -> return $ AnyCardanoEra ByronEra
ShelleyMode -> return $ AnyCardanoEra ShelleyEra
CardanoMode -> ExceptT $ queryExpr $ QueryCurrentEra CardanoModeIsMultiEra

-- | Lift a query value into a monadic query expression.
-- Use 'queryExpr_' in a do block to construct monadic local state queries.
queryExpr_ :: ()
=> e `CouldBe` UnsupportedNtcVersionError
=> QueryInMode mode a
-> ExceptT (Variant e) (LocalStateQueryExpr block point (QueryInMode mode) r IO) a
queryExpr_ q = do
let minNtcVersion = nodeToClientVersionOf q
ntcVersion <- lift getNtcVersion
if ntcVersion >= minNtcVersion
then lift
$ LocalStateQueryExpr $ ReaderT $ \_ -> ContT $ \f -> pure $
Net.Query.SendMsgQuery q $
Net.Query.ClientStQuerying
{ Net.Query.recvMsgResult = f
}
else OO.throw $ UnsupportedNtcVersionError minNtcVersion ntcVersion

-- | A monadic expresion that determines what era the node is in.
determineEraExpr_ :: ()
=> e `CouldBe` UnsupportedNtcVersionError
=> ConsensusModeParams mode
-> ExceptT (Variant e) (LocalStateQueryExpr block point (QueryInMode mode) r IO) AnyCardanoEra
determineEraExpr_ cModeParams =
case consensusModeOnly cModeParams of
ByronMode -> return $ AnyCardanoEra ByronEra
ShelleyMode -> return $ AnyCardanoEra ShelleyEra
CardanoMode -> queryExpr_ $ QueryCurrentEra CardanoModeIsMultiEra

0 comments on commit ad44dad

Please sign in to comment.