module Sound.ALSA.Sequencer.Event.Accessor (
   highPriority,
   tag,
   queue,
   timestamp,
   source,
   dest,
   connect,
   body,
   ) where

import qualified Sound.ALSA.Sequencer.Address as Addr
import qualified Sound.ALSA.Sequencer.Queue as Queue
import qualified Sound.ALSA.Sequencer.Marshal.Event as Event

import qualified Data.Accessor.Basic as Acc

import Data.Word (Word8, )


highPriority :: Acc.T Event.T Bool
tag :: Acc.T Event.T Word8
queue :: Acc.T Event.T Queue.T
timestamp :: Acc.T Event.T Event.TimeStamp
source :: Acc.T Event.T Addr.T
dest :: Acc.T Event.T Addr.T
connect :: Acc.T Event.T Event.Connect
body :: Acc.T Event.T Event.Data

highPriority =
   Acc.fromSetGet (\x ev -> ev{Event.highPriority = x}) Event.highPriority
tag =
   Acc.fromSetGet (\x ev -> ev{Event.tag = x}) Event.tag
queue =
   Acc.fromSetGet (\x ev -> ev{Event.queue = x}) Event.queue
timestamp =
   Acc.fromSetGet (\x ev -> ev{Event.timestamp = x}) Event.timestamp
source =
   Acc.fromSetGet (\x ev -> ev{Event.source = x}) Event.source
dest =
   Acc.fromSetGet (\x ev -> ev{Event.dest = x}) Event.dest
connect =
   Acc.fromSetGet
      (\(Event.Connect src dst) ev -> ev{Event.source = src, Event.dest = dst})
      (\ev -> Event.Connect (Event.source ev) (Event.dest ev))
body =
   Acc.fromSetGet (\x ev -> ev{Event.body = x}) Event.body