{-# Language OverloadedStrings #-} module Export where ----------------Imports---------------- import Data.Aeson import Data.Map hiding (fromList) import Data.Vector hiding ((!)) import Workflow (NodeData(..), EdgeData(..), GraphData(..)) --------------------------------------- ---------------Instances--------------- instance ToJSON NodeData where toJSON (NData d) = Array (fromList $ foldrWithKey newObject [] d) where newObject :: String -> Map String String -> [Value] -> [Value] newObject ident values result = object [ "id" .= ident, "name" .= values ! "name", "val" .= show 5, -- Todo adjust to number of edges "stateData" .= object [ "viewers" .= values ! "viewers", "final" .= values ! "final"]] : result -- toEncoding = genericToEncoding defaultOptions instance ToJSON EdgeData where toJSON (EData d) = Array (fromList $ foldrWithKey newObject [] d) where newObject :: String -> Map String String -> [Value] -> [Value] newObject ident values result = object [ "id" .= ident, "name" .= values ! "name", "source" .= values ! "source", "target" .= values ! "target", "actionData" .= object [ "mode" .= values ! "mode"]] : result instance ToJSON GraphData where toJSON (GData (nd, ed)) = object ["states" .= toJSON nd, "actions" .= toJSON ed] ---------------------------------------