{-# Language OverloadedStrings #-} module Export where ----------------Imports---------------- import Data.Aeson import Data.Map hiding (fromList) import Data.Vector hiding ((!)) import Workflow (NodeData(..), EdgeData(..), GraphData(..), Entry(..)) import Data.Text (pack) --------------------------------------- ---------------Instances--------------- instance ToJSON Entry where toJSON (Single s) = toJSON s toJSON (Dict d) = toJSON d toJSON (List l) = toJSON l instance ToJSON NodeData where toJSON (NData d) = Array (fromList $ foldrWithKey newObject [] d) where newObject :: String -> Map String Entry -> [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 Entry -> [Value] -> [Value] newObject ident values result = object [ "id" .= ident, "name" .= values ! "name", "source" .= values ! "source", "target" .= values ! "target", "actionData" .= object [ "mode" .= values ! "mode", "actors" .= values ! "actors"]] : result instance ToJSON GraphData where toJSON (GData (nd, ed)) = object ["states" .= toJSON nd, "actions" .= toJSON ed] ---------------------------------------