fix(workflow): fix node and graph FromJSON instances
This commit is contained in:
parent
8812f24d90
commit
263fee19f2
@ -130,7 +130,9 @@ instance (Ord userid, Ord fileid) => Ord (WorkflowGraphEdge userid fileid) where
|
||||
e1@WGE{} <= e2@WGE{} = wgeActors e1 <= wgeActors e2 && wgeTarget e1 <= wgeTarget e2 && wgeForm e1 <= wgeForm e2
|
||||
|
||||
|
||||
data WorkflowGraph userid fileid = WorkflowGraph (Map WorkflowGraphNodeLabel (WorkflowGraphNode, Set (WorkflowGraphEdge userid fileid)))
|
||||
data WorkflowGraph userid fileid = WorkflowGraph
|
||||
{ wgNodes :: Map WorkflowGraphNodeLabel (WorkflowGraphNode, Set (WorkflowGraphEdge userid fileid))
|
||||
}
|
||||
|
||||
instance (Show userid, Show fileid) => Show (WorkflowGraph userid fileid) where
|
||||
show (WorkflowGraph m) = show m
|
||||
@ -176,9 +178,18 @@ instance (FromJSON userid) => FromJSON (WorkflowRole userid) where
|
||||
_ -> terror $ "WorkflowRole parseJSON error: expected role (user|authorized|initiator), but got " <> role
|
||||
|
||||
instance (ToJSON userid, ToJSON fileid) => ToJSON (WorkflowGraph userid fileid) where
|
||||
toJSON (WorkflowGraph m) = toJSON m
|
||||
instance (FromJSON userid, FromJSON fileid) => FromJSON (WorkflowGraph userid fileid) where
|
||||
parseJSON = parseJSON
|
||||
toJSON WorkflowGraph{..} = JSON.object
|
||||
[ "tag" JSON..= ("workflow" :: Text)
|
||||
, "nodes" JSON..= wgNodes
|
||||
]
|
||||
instance (FromJSON userid, FromJSON fileid, Ord userid, Ord fileid) => FromJSON (WorkflowGraph userid fileid) where
|
||||
parseJSON = JSON.withObject "WorkflowGraph" $ \o -> do
|
||||
fieldTag <- o JSON..: "tag"
|
||||
case fieldTag of
|
||||
"workflow" -> do
|
||||
wgNodes <- o JSON..: "nodes"
|
||||
return WorkflowGraph{..}
|
||||
_ -> terror $ "WorkflowGraph parseJSON error: expected tag workflow, but got " <> fieldTag
|
||||
|
||||
instance (ToJSON userid, ToJSON fileid) => ToJSON (WorkflowGraphEdge userid fileid) where
|
||||
toJSON (WGE{..}) = JSON.object
|
||||
@ -262,9 +273,18 @@ instance (FromJSON fileid, FromJSON userid) => FromJSON (WorkflowEdgePayloadSpec
|
||||
_ -> terror $ "WorkflowEdgePayloadSpecification parseJSON error: expected field tag (text|number|bool|file|user), but got " <> fieldTag
|
||||
|
||||
instance ToJSON WorkflowGraphNode where
|
||||
toJSON (WGN{..}) = toJSON wgnStatus
|
||||
toJSON WGN{..} = JSON.object
|
||||
[ "tag" JSON..= ("node" :: Text)
|
||||
, "status" JSON..= wgnStatus
|
||||
]
|
||||
instance FromJSON WorkflowGraphNode where
|
||||
parseJSON = parseJSON
|
||||
parseJSON = JSON.withObject "WorkflowGraphNode" $ \o -> do
|
||||
fieldTag <- o JSON..: "tag"
|
||||
case fieldTag of
|
||||
"node" -> do
|
||||
wgnStatus <- o JSON..: "status"
|
||||
return WGN{..}
|
||||
_ -> terror $ "WorkflowGraphNode parseJSON error: expected tag node, but got " <> fieldTag
|
||||
|
||||
deriveJSON defaultOptions
|
||||
{ fieldLabelModifier = camelToPathPiece' 1
|
||||
|
||||
Loading…
Reference in New Issue
Block a user