fix(workflow): fix types

This commit is contained in:
Sarah Vaupel 2020-04-03 17:45:39 +02:00 committed by Gregor Kleen
parent d1b9d502e8
commit ce1acec444

View File

@ -33,11 +33,11 @@ type WorkflowGraphNodeLabel = CI Text
data WorkflowEdgePayload userid fileid (payload :: *) where data WorkflowEdgePayload userid fileid (payload :: *) where
WEPText :: Text -> WorkflowEdgePayload userid fileid Text WEPText :: Text -> WorkflowEdgePayload userid fileid Text
WEPNumber :: HasResolution prec => (Fixed prec) -> WorkflowEdgePayload userid fileid (Fixed prec) WEPNumber :: SomeResolution -> WorkflowEdgePayload userid fileid SomeResolution
WEPBool :: Bool -> WorkflowEdgePayload userid fileid Bool WEPBool :: Bool -> WorkflowEdgePayload userid fileid Bool
WEPFile :: fileid -> WorkflowEdgePayload userid fileid fileid WEPFile :: fileid -> WorkflowEdgePayload userid fileid fileid
WEPUser :: userid -> WorkflowEdgePayload userid fileid userid WEPUser :: userid -> WorkflowEdgePayload userid fileid userid
data WorkflowEdgePayload' = WEPText' | WEPNumber' | WEPBool' | WEPFile' | WEPUser' data WorkflowEdgePayload' = WEPText' | WEPNumber' | WEPBool' | WEPFile' | WEPUser'
deriving (Eq, Ord, Enum, Show, Read, Data, Generic, Typeable) deriving (Eq, Ord, Enum, Show, Read, Data, Generic, Typeable)
@ -52,13 +52,12 @@ data WorkflowEdgePayloadField fileid userid (payload :: *) where
, wepftTooltip :: Maybe Text , wepftTooltip :: Maybe Text
, wepftDefault :: Maybe Text , wepftDefault :: Maybe Text
} -> WorkflowEdgePayloadField fileid userid Text } -> WorkflowEdgePayloadField fileid userid Text
WorkflowEdgePayloadFieldNumber :: HasResolution prec => WorkflowEdgePayloadFieldNumber :: { wepfnLabel :: Text
{ wepfnLabel :: Text
, wepfnPlaceholder :: Text , wepfnPlaceholder :: Text
, wepfnTooltip :: Maybe Text , wepfnTooltip :: Maybe Text
, wepfnDefault :: Maybe (Fixed prec) , wepfnDefault :: Maybe SomeResolution
, wepfnPrecision :: SomeResolution , wepfnPrecision :: SomeResolution
} -> WorkflowEdgePayloadField fileid userid (Fixed prec) } -> WorkflowEdgePayloadField fileid userid SomeResolution
WorkflowEdgePayloadFieldBool :: { wepfbLabel :: Text WorkflowEdgePayloadFieldBool :: { wepfbLabel :: Text
, wepfbTooltip :: Maybe Text , wepfbTooltip :: Maybe Text
, wepfbDefault :: Maybe Bool , wepfbDefault :: Maybe Bool
@ -146,8 +145,7 @@ instance (FromJSON userid) => FromJSON (WorkflowRole userid) where
"initiator" -> do "initiator" -> do
iid <- o .: "initiator" iid <- o .: "initiator"
return $ WorkflowRoleInitiator iid return $ WorkflowRoleInitiator iid
_ -> do _ -> terror $ "WorkflowRole parseJSON error: expected role (user|authorized|initiator), but got " <> role
(error.show) $ "WorkflowRole parseJSON error: expected role (user|authorized|initiator), but got " ++ role
instance (ToJSON userid, ToJSON fileid) => ToJSON (WorkflowGraph userid fileid) where instance (ToJSON userid, ToJSON fileid) => ToJSON (WorkflowGraph userid fileid) where
toJSON (WorkflowGraph m) = toJSON m toJSON (WorkflowGraph m) = toJSON m
@ -168,81 +166,72 @@ instance (FromJSON userid, Ord userid, FromJSON fileid) => FromJSON (WorkflowGra
return WGE{..} return WGE{..}
instance (ToJSON fileid, ToJSON userid) => ToJSON (WorkflowEdgePayloadSpecification fileid userid) where instance (ToJSON fileid, ToJSON userid) => ToJSON (WorkflowEdgePayloadSpecification fileid userid) where
toJSON (WorkflowEdgePayloadSpecification f@(WorkflowEdgePayloadFieldText{})) = toJSON f toJSON (WorkflowEdgePayloadSpecification WorkflowEdgePayloadFieldText{..}) = JSON.object
toJSON (WorkflowEdgePayloadSpecification f@(WorkflowEdgePayloadFieldNumber{})) = toJSON f [ "tag" JSON..= ("text" :: Text)
toJSON (WorkflowEdgePayloadSpecification f@(WorkflowEdgePayloadFieldBool{})) = toJSON f , "label" JSON..= wepftLabel
toJSON (WorkflowEdgePayloadSpecification f@(WorkflowEdgePayloadFieldFile{})) = toJSON f , "placeholder" JSON..= wepftPlaceholder
toJSON (WorkflowEdgePayloadSpecification f@(WorkflowEdgePayloadFieldUser{})) = toJSON f , "tooltip" JSON..= wepftTooltip
, "default" JSON..= wepftDefault
]
toJSON (WorkflowEdgePayloadSpecification WorkflowEdgePayloadFieldNumber{..}) = JSON.object
[ "tag" JSON..= ("number" :: Text)
, "label" JSON..= wepfnLabel
, "placeholder" JSON..= wepfnPlaceholder
, "tooltip" JSON..= wepfnTooltip
, "default" JSON..= wepfnDefault
, "precision" JSON..= wepfnPrecision
]
toJSON (WorkflowEdgePayloadSpecification WorkflowEdgePayloadFieldBool{..}) = JSON.object
[ "tag" JSON..= ("bool" :: Text)
, "label" JSON..= wepfbLabel
, "tooltip" JSON..= wepfbTooltip
, "default" JSON..= wepfbDefault
]
toJSON (WorkflowEdgePayloadSpecification WorkflowEdgePayloadFieldFile{..}) = JSON.object
[ "tag" JSON..= ("file" :: Text)
, "label" JSON..= wepffLabel
, "tooltip" JSON..= wepffTooltip
, "default" JSON..= wepffDefault
]
toJSON (WorkflowEdgePayloadSpecification WorkflowEdgePayloadFieldUser{..}) = JSON.object
[ "tag" JSON..= ("user" :: Text)
, "label" JSON..= wepfuLabel
, "tooltip" JSON..= wepfuTooltip
, "default" JSON..= wepfuDefault
]
instance (FromJSON fileid, FromJSON userid) => FromJSON (WorkflowEdgePayloadSpecification fileid userid) where instance (FromJSON fileid, FromJSON userid) => FromJSON (WorkflowEdgePayloadSpecification fileid userid) where
parseJSON = parseJSON -- TODO parseJSON = JSON.withObject "WorkflowEdgePayloadSpecification" $ \o -> do
fieldTag <- (o JSON..: "tag" :: Parser Text)
instance (ToJSON fileid, ToJSON userid) => ToJSON (WorkflowEdgePayloadField fileid userid Text) where case fieldTag of
toJSON (WorkflowEdgePayloadFieldText{..}) = JSON.object
[ "label" JSON..= wepftLabel
, "placeholder" JSON..= wepftPlaceholder
, "tooltip" JSON..= wepftTooltip
, "default" JSON..= wepftDefault
]
instance (ToJSON fileid, ToJSON userid, HasResolution prec) => ToJSON (WorkflowEdgePayloadField fileid userid (Fixed prec)) where
toJSON (WorkflowEdgePayloadFieldNumber{..}) = JSON.object
[ "label" JSON..= wepfnLabel
, "placeholder" JSON..= wepfnPlaceholder
, "tooltip" JSON..= wepfnTooltip
, "default" JSON..= wepfnDefault
, "precision" JSON..= wepfnPrecision
]
instance (ToJSON fileid, ToJSON userid) => ToJSON (WorkflowEdgePayloadField fileid userid Bool) where
toJSON (WorkflowEdgePayloadFieldBool{..}) = JSON.object
[ "label" JSON..= wepfbLabel
, "tooltip" JSON..= wepfbTooltip
, "default" JSON..= wepfbDefault
]
instance (ToJSON fileid, ToJSON userid) => ToJSON (WorkflowEdgePayloadField fileid userid FileInfo) where
toJSON (WorkflowEdgePayloadFieldFile{..}) = JSON.object
[ "label" JSON..= wepffLabel
, "tooltip" JSON..= wepffTooltip
, "default" JSON..= wepffDefault
]
instance (ToJSON fileid, ToJSON userid) => ToJSON (WorkflowEdgePayloadField fileid userid userid) where
toJSON (WorkflowEdgePayloadFieldUser{..}) = JSON.object
[ "label" JSON..= wepfuLabel
, "tooltip" JSON..= wepfuTooltip
, "default" JSON..= wepfuDefault
]
instance (FromJSON fileid, FromJSON userid) => FromJSON (WorkflowEdgePayloadField fileid userid payload) where
parseJSON = JSON.withObject "WorkflowEdgePayloadField" $ \o -> do
fieldType <- (o JSON..: "type" :: Parser Text)
case fieldType of
"text" -> do "text" -> do
wepftLabel <- o JSON..: "label" wepftLabel <- o JSON..: "label"
wepftPlaceholder <- o JSON..: "placeholder" wepftPlaceholder <- o JSON..: "placeholder"
wepftTooltip <- o JSON..:? "tooltip" wepftTooltip <- o JSON..:? "tooltip"
wepftDefault <- o JSON..:? "default" wepftDefault <- o JSON..:? "default"
return (WorkflowEdgePayloadFieldText{..}) return $ WorkflowEdgePayloadSpecification WorkflowEdgePayloadFieldText{..}
"number" -> do "number" -> do
wepfnLabel <- o JSON..: "label" wepfnLabel <- o JSON..: "label"
wepfnPlaceholder <- o JSON..: "placeholder" wepfnPlaceholder <- o JSON..: "placeholder"
wepfnTooltip <- o JSON..:? "tooltip" wepfnTooltip <- o JSON..:? "tooltip"
wepfnDefault <- (o JSON..:? "default" :: Parser (Maybe (Fixed prec))) wepfnDefault <- (o JSON..:? "default" :: Parser (Maybe SomeResolution))
wepfnPrecision <- o JSON..: "precision" wepfnPrecision <- o JSON..: "precision"
return (WorkflowEdgePayloadFieldNumber{..}) return $ WorkflowEdgePayloadSpecification WorkflowEdgePayloadFieldNumber{..}
"bool" -> do "bool" -> do
wepfbLabel <- o JSON..: "label" wepfbLabel <- o JSON..: "label"
wepfbTooltip <- o JSON..:? "tooltip" wepfbTooltip <- o JSON..:? "tooltip"
wepfbDefault <- (o JSON..:? "default" :: Parser (Maybe Bool)) wepfbDefault <- (o JSON..:? "default" :: Parser (Maybe Bool))
return (WorkflowEdgePayloadFieldBool{..}) return $ WorkflowEdgePayloadSpecification WorkflowEdgePayloadFieldBool{..}
"file" -> do "file" -> do
wepffLabel <- o JSON..: "label" wepffLabel <- o JSON..: "label"
wepffTooltip <- o JSON..:? "tooltip" wepffTooltip <- o JSON..:? "tooltip"
wepffDefault <- (o JSON..:? "default" :: Parser (Maybe fileid)) wepffDefault <- (o JSON..:? "default" :: Parser (Maybe fileid))
return (WorkflowEdgePayloadFieldFile{..}) return $ WorkflowEdgePayloadSpecification WorkflowEdgePayloadFieldFile{..}
"user" -> do "user" -> do
wepfuLabel <- o JSON..: "label" wepfuLabel <- o JSON..: "label"
wepfuTooltip <- o JSON..:? "tooltip" wepfuTooltip <- o JSON..:? "tooltip"
wepfuDefault <- (o JSON..:? "default" :: Parser (Maybe userid)) wepfuDefault <- (o JSON..:? "default" :: Parser (Maybe userid))
return (WorkflowEdgePayloadFieldUser{..}) return $ WorkflowEdgePayloadSpecification WorkflowEdgePayloadFieldUser{..}
_ -> error $ "WorkflowEdgePayloadField parseJSON error: expected field type (text|number|bool|file|user), but got " ++ fieldType _ -> terror $ "WorkflowEdgePayloadSpecification parseJSON error: expected field tag (text|number|bool|file|user), but got " <> fieldTag
instance ToJSON WorkflowGraphNode where instance ToJSON WorkflowGraphNode where
toJSON (WGN{..}) = toJSON wgnStatus toJSON (WGN{..}) = toJSON wgnStatus