{-|
Module      : EventLoop.Input.Keyboard
Description : Library of all the possible 'Keyboard' events in the example implementation.
Copyright   : (c) Sebastiaan la Fleur, 2014
License     : BSD3
Maintainer  : sebastiaan.la.fleur@gmail.com
Stability   : experimental
Portability : All

This module expresses how the 'Keyboard' IO device is modelled in the example implementation. 
-}
module EventLoop.Input.Keyboard(
    Keyboard(..),
    KeyboardButton
) where

import EventLoop.Json
import EventLoop.Config

-- | Datatype to express the different 'Keyboard' events.
data Keyboard = KeyPress KeyboardButton

-- | Type to express how a 'KeyboardButton' is modelled.
type KeyboardButton = [Char]

-- | Instance to express how a JSON formatted 'String' can be parsed into a 'Keyboard' event.
instance FromJSON Keyboard where
    fromJsonMessage (JSONObject ms) = KeyPress button
                                    where
                                        JSONString button = retrieveError buttonS ms