aboutsummaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGregor Kleen <gkleen@yggdrasil.li>2016-01-11 03:34:16 +0000
committerGregor Kleen <gkleen@yggdrasil.li>2016-01-11 03:34:16 +0000
commitea079b5ee00f5371bde992a14676374a431371b5 (patch)
treeb6b9dd11a18af502eb777c304762a68cd7e3a146 /spec
parentf6dc3d1d5e5109c4196ad17ee69ccc7fc8b57b3b (diff)
downloadthermoprint-ea079b5ee00f5371bde992a14676374a431371b5.tar
thermoprint-ea079b5ee00f5371bde992a14676374a431371b5.tar.gz
thermoprint-ea079b5ee00f5371bde992a14676374a431371b5.tar.bz2
thermoprint-ea079b5ee00f5371bde992a14676374a431371b5.tar.xz
thermoprint-ea079b5ee00f5371bde992a14676374a431371b5.zip
More fleshed out API
Diffstat (limited to 'spec')
-rw-r--r--spec/src/Thermoprint/API.hs69
-rw-r--r--spec/src/Thermoprint/Identifiers.hs19
-rw-r--r--spec/thermoprint-spec.cabal1
3 files changed, 81 insertions, 8 deletions
diff --git a/spec/src/Thermoprint/API.hs b/spec/src/Thermoprint/API.hs
index f2ffd02..d722903 100644
--- a/spec/src/Thermoprint/API.hs
+++ b/spec/src/Thermoprint/API.hs
@@ -1,21 +1,74 @@
1{-# LANGUAGE GeneralizedNewtypeDeriving, NoDeriveAnyClass #-} 1{-# LANGUAGE DeriveGeneric, DeriveAnyClass #-}
2{-# LANGUAGE TypeOperators, DataKinds #-} 2{-# LANGUAGE TypeOperators, DataKinds #-}
3{-# LANGUAGE OverloadedStrings #-}
3 4
4module Thermoprint.API 5module Thermoprint.API
5 ( PrinterId(..) 6 ( PrinterStatus(..)
6 , JobId(..) 7 , JobStatus(..)
7 , ThermoprintAPI 8 , ThermoprintAPI
9 , thermoprintAPI
10 , module Thermoprint.Identifiers
11 , module Thermoprint.Printout
8 ) where 12 ) where
9 13
10import Thermoprint.Printout 14import Thermoprint.Printout
15import Thermoprint.Identifiers
11 16
12import Servant.API 17import Servant.API
18import Servant.Docs
13import Data.Aeson 19import Data.Aeson
14 20
15newtype PrinterId = PrinterId Integer 21import Data.Set (Set)
16 deriving (Show, Eq, FromText, ToText, FromJSON, ToJSON) 22import Data.Sequence (Seq)
17 23
18newtype JobId = JobId Integer 24import GHC.Generics (Generic)
19 deriving (Show, Eq, FromText, ToText, FromJSON, ToJSON)
20 25
21type ThermoprintAPI = "print" :> Capture "printerId" PrinterId :> ReqBody '[JSON] Printout :> Post '[JSON] JobId 26import Data.Proxy (Proxy(..))
27
28import Data.Functor.Identity (Identity(..))
29import Control.Exception (Exception)
30import Data.Typeable (Typeable)
31
32data PrinterStatus = Busy JobId
33 | Available
34 deriving (Generic, Show, FromJSON, ToJSON)
35
36data JobInfo = JobInfo
37 { jobPrinter :: PrinterId
38 , jobStatus :: JobStatus
39 }
40
41data JobStatus = Queued
42 | Printing
43 | Done
44 | Failed PrintingError
45 deriving (Generic, Show, FromJSON, ToJSON)
46
47data PrintingError = UnknownError
48 deriving (Typeable, Generic, Show, FromJSON, ToJSON, Exception)
49
50type ThermoprintAPI = "printers" :> Get '[JSON] (Set PrinterId)
51 :<|> "printer" :> Capture "printerId" PrinterId :> (
52 ReqBody '[JSON] Printout :> Post '[JSON] JobId
53 :<|> "status" :> Get '[JSON] PrinterStatus
54 )
55 :<|> "jobs" :> (
56 QueryParam "printer" PrinterId :> QueryParam "min" JobId :> QueryParam "max" JobId :> Get '[JSON] (Seq JobId)
57 )
58 :<|> "job" :> Capture "jobId" JobId :> (
59 Get '[JSON] Printout
60 :<|> "status" :> Get '[JSON] JobInfo
61 :<|> Delete '[] ()
62 )
63 :<|> "drafts" :> (
64 Get '[JSON] (Set DraftId)
65 :<|> ReqBody '[JSON] Printout :> Post '[JSON] DraftId
66 )
67 :<|> "draft" :> Capture "draftId" DraftId :> (
68 ReqBody '[JSON] Printout :> Put '[] ()
69 :<|> Get '[JSON] Printout
70 :<|> Delete '[] ()
71 )
72
73thermoprintAPI :: Proxy ThermoprintAPI
74thermoprintAPI = Proxy
diff --git a/spec/src/Thermoprint/Identifiers.hs b/spec/src/Thermoprint/Identifiers.hs
new file mode 100644
index 0000000..bd0b7a6
--- /dev/null
+++ b/spec/src/Thermoprint/Identifiers.hs
@@ -0,0 +1,19 @@
1{-# LANGUAGE GeneralizedNewtypeDeriving, NoDeriveAnyClass #-}
2
3module Thermoprint.Identifiers
4 ( PrinterId(..)
5 , JobId(..)
6 , DraftId(..)
7 ) where
8
9import Servant.API (ToText, FromText)
10import Data.Aeson (FromJSON, ToJSON)
11
12newtype PrinterId = PrinterId Integer
13 deriving (Show, Eq, Ord, Enum, FromText, ToText, FromJSON, ToJSON)
14
15newtype JobId = JobId Integer
16 deriving (Show, Eq, Ord, Enum, FromText, ToText, FromJSON, ToJSON)
17
18newtype DraftId = DraftId Integer
19 deriving (Show, Eq, Ord, Enum, FromText, ToText, FromJSON, ToJSON)
diff --git a/spec/thermoprint-spec.cabal b/spec/thermoprint-spec.cabal
index f7227ca..b9f7fd6 100644
--- a/spec/thermoprint-spec.cabal
+++ b/spec/thermoprint-spec.cabal
@@ -19,6 +19,7 @@ cabal-version: >=1.10
19library 19library
20 hs-source-dirs: src 20 hs-source-dirs: src
21 exposed-modules: Thermoprint.Printout 21 exposed-modules: Thermoprint.Printout
22 , Thermoprint.Identifiers
22 , Thermoprint.API 23 , Thermoprint.API
23 -- other-modules: 24 -- other-modules:
24 -- other-extensions: 25 -- other-extensions: