{-# LANGUAGE DeriveGeneric, DeriveAnyClass #-} module Thermoprint.Server.Queue ( Queue(..), QueueEntry(..) ) where import Thermoprint.API (PrintingError(..), Printout) import qualified Thermoprint.API as API (JobStatus(..)) import Thermoprint.Server.Database import Data.Sequence (Seq) import qualified Data.Sequence as Seq import Data.Time import Control.DeepSeq (NFData) import Data.Typeable (Typeable) import GHC.Generics (Generic) import Data.Default.Class -- | Zipper for 'Seq QueueEntry' data Queue = Queue { pending :: Seq QueueEntry -- ^ Pending jobs, closest last , current :: Maybe QueueEntry , history :: Seq (QueueEntry, Maybe PrintingError) -- ^ Completed jobs, closest first } deriving (Typeable, Generic, NFData) instance Default Queue where def = Queue { pending = Seq.empty , current = Nothing , history = Seq.empty } data QueueEntry = QueueEntry { jobId :: JobId , created :: UTCTime } deriving (Typeable, Generic, NFData)