keiro-dsl-0.15.0.0: test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Codec.hs
-- @generated by keiro-dsl 0.15.0.0 (language keiro-dsl 4) from aggregate Beta; do not edit.
module Proof.WorkspaceProof.Beta.Generated.Codec (
betaCodec,
parseBetaEvent,
encodeBetaEvent,
) where
import Proof.WorkspaceProof.Beta.Generated.Domain
import Proof.WorkspaceProof.Generated.Nominals (proofIdText)
import Proof.WorkspaceProof.Generated.Nominals.Internal (unsafeProofIdFromLegacyText)
import Data.Aeson (Value, object, withObject, (.:), (.=))
import Data.Aeson.Types (parseEither)
import Data.List.NonEmpty (NonEmpty (..))
import Data.List.NonEmpty qualified as NonEmpty
import Data.Text (Text)
import qualified Data.Text as T
import Keiro.Codec (Codec (..), EventType (..))
betaEventTypes :: NonEmpty EventType
betaEventTypes = EventType "BetaPinged" :| []
betaCodec :: Codec BetaEvent
betaCodec =
Codec
{ eventTypes = betaEventTypes
, eventType = \case
BetaPinged{} -> EventType "BetaPinged"
, schemaVersion = 1
, encode = encodeBetaEvent
, decode = parseBetaEvent
, upcasters = []
}
encodeBetaEvent :: BetaEvent -> Value
encodeBetaEvent = \case
BetaPinged payload ->
object
[ "kind" .= ("BetaPinged" :: Text)
, "proofId" .= proofIdText payload.proofId
]
parseBetaEvent :: EventType -> Value -> Either Text BetaEvent
parseBetaEvent (EventType tag) = mapLeftText . parseEither (withObject "BetaEvent" go)
where
go o = do
case tag of
"BetaPinged" ->
BetaPinged
<$> ( BetaPingedData
<$> (unsafeProofIdFromLegacyText <$> o .: "proofId")
)
_ -> fail ("unknown event type " <> show tag <> "; expected one of: " <> renderExpectedEventTypes betaEventTypes)
mapLeftText :: Either String b -> Either Text b
mapLeftText = either (Left . T.pack) Right
renderExpectedEventTypes :: NonEmpty EventType -> String
renderExpectedEventTypes =
T.unpack
. T.intercalate ", "
. map (\(EventType eventTypeName) -> eventTypeName)
. NonEmpty.toList