{-|
Module : EventLoop.Output.OutputEvent
Description : Library of all the possible 'OutputEvent's in the example implementation.
Copyright : (c) Sebastiaan la Fleur, 2014
License : BSD3
Maintainer : sebastiaan.la.fleur@gmail.com
Stability : experimental
Portability : All
All different 'OutputEvent's are combined to a single 'OutputEvent' type.
In this example implementation, the 'EventLoop.Output.Graphical.Graphical' and 'EventLoop.Output.SystemMessage.SystemMessageOut' are modeled.
-}
module EventLoop.Output.OutputEvent where
import EventLoop.Output.Graphical.Graphical
import EventLoop.Output.SystemMessage
import EventLoop.Config
import EventLoop.Json
{-|
The central 'OutputEvent' type.
-}
data OutputEvent = OutGraphical Graphical
| OutSysMessage [SystemMessageOut]
{-|
Instance to express how an 'OutputEvent' can be parsed into a JSON formatted message.
-}
instance JSONAble OutputEvent where
toJsonMessage (OutGraphical graph) = JSONObject [(JSONMember modeS (JSONString graphicalS)), (JSONMember commandS (toJsonMessage graph))]
toJsonMessage (OutSysMessage ms) = JSONObject [(JSONMember modeS (JSONString sysmessageanswersS)), (JSONMember answersS (JSONArray (map toJsonMessage ms)))]