Я использую Yesod для создания единой конечной точки POST, которая может обрабатывать несколько форматов JSON. Это я назвал MessageType
(см. Код ниже).
Я пытаюсь выяснить, как можно сопоставить регистр со структурой JSON, который приходит, чтобы выяснить, что это за MessageType
, для этого примера мне нужно проверить, является ли это ProjectCreation
.
Хочу иметь возможность JSON (projectCreation structure) -> MessageType -> do X
Есть ли способ просто case
сопоставить JSON для определения его типа?
data MessageType =
ProjectCreation { id :: ProjectId
, permId :: Maybe UUID
, queueId :: UUID
, transactionTimeKey :: Maybe Text
, name :: Text
, description :: Maybe Text
, createdOn :: Maybe UTCTime
, createdBy :: Maybe AgentId
, enabled :: Bool
, size :: Fixed E2
}
| DebtPaymentHistorical {..}
| PowerForecast {..}
...
deriving (Show, Read, Eq)
derivePersistField "MessageType"
$(deriveJSON defaultOptions ''MessageType)