aboutsummaryrefslogtreecommitdiff
path: root/server/src/Thermoprint/Server/Queue.hs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/Thermoprint/Server/Queue.hs')
-rw-r--r--server/src/Thermoprint/Server/Queue.hs43
1 files changed, 43 insertions, 0 deletions
diff --git a/server/src/Thermoprint/Server/Queue.hs b/server/src/Thermoprint/Server/Queue.hs
new file mode 100644
index 0000000..d2400a1
--- /dev/null
+++ b/server/src/Thermoprint/Server/Queue.hs
@@ -0,0 +1,43 @@
1{-# LANGUAGE DeriveGeneric, DeriveAnyClass #-}
2
3module Thermoprint.Server.Queue
4 ( Queue(..), QueueEntry(..)
5 ) where
6
7import Thermoprint.API (PrintingError(..), Printout)
8import qualified Thermoprint.API as API (JobStatus(..))
9
10import Thermoprint.Server.Database
11
12import Data.Sequence (Seq)
13import qualified Data.Sequence as Seq
14
15import Data.Time
16
17import Control.DeepSeq (NFData)
18import Data.Typeable (Typeable)
19import GHC.Generics (Generic)
20
21import Data.Default.Class
22
23-- | Zipper for 'Seq QueueEntry'
24data Queue = Queue
25 { pending :: Seq QueueEntry -- ^ Pending jobs, closest last
26 , current :: Maybe QueueEntry
27 , history :: Seq (QueueEntry, Maybe PrintingError) -- ^ Completed jobs, closest first
28 }
29 deriving (Typeable, Generic, NFData)
30
31instance Default Queue where
32 def = Queue
33 { pending = Seq.empty
34 , current = Nothing
35 , history = Seq.empty
36 }
37
38data QueueEntry = QueueEntry
39 { jobId :: JobId
40 , created :: UTCTime
41 }
42 deriving (Typeable, Generic, NFData)
43