{-# LANGUAGE MultiParamTypeClasses #-}
module Graphics.XHB.Requests.Internal.Instances.Sync () where
import Graphics.XHB.Gen.Sync
import Graphics.XHB.Requests.Internal.Classes
import Prelude (fmap)
import Data.Bifunctor (second)
import Graphics.XHB (getReply)

instance RequestWithReply Initialize InitializeReply where
        requestWithReplyIO (MkInitialize a b) conn
          = fmap getReply (initialize conn a b)

instance RequestWithReply ListSystemCounters
         ListSystemCountersReply where
        requestWithReplyIO (MkListSystemCounters) conn
          = fmap getReply (listSystemCounters conn)

instance Request CreateCounter where
        requestIO (MkCreateCounter a b) conn = createCounter conn a b

instance Request DestroyCounter where
        requestIO (MkDestroyCounter a) conn = destroyCounter conn a

instance RequestWithReply QueryCounter QueryCounterReply where
        requestWithReplyIO (MkQueryCounter a) conn
          = fmap (fmap (second MkQueryCounterReply))
              (fmap getReply (queryCounter conn a))

instance Request Await where
        requestIO (MkAwait a) conn = await conn a

instance Request ChangeCounter where
        requestIO (MkChangeCounter a b) conn = changeCounter conn a b

instance Request SetCounter where
        requestIO (MkSetCounter a b) conn = setCounter conn a b

instance Request CreateAlarm where
        requestIO (MkCreateAlarm a b) conn = createAlarm conn a b

instance Request ChangeAlarm where
        requestIO (MkChangeAlarm a b) conn = changeAlarm conn a b

instance Request DestroyAlarm where
        requestIO (MkDestroyAlarm a) conn = destroyAlarm conn a

instance RequestWithReply QueryAlarm QueryAlarmReply where
        requestWithReplyIO (MkQueryAlarm a) conn
          = fmap getReply (queryAlarm conn a)

instance Request SetPriority where
        requestIO (MkSetPriority a b) conn = setPriority conn a b

instance RequestWithReply GetPriority GetPriorityReply where
        requestWithReplyIO (MkGetPriority a) conn
          = fmap (fmap (second MkGetPriorityReply))
              (fmap getReply (getPriority conn a))