diff options
author | Gregor Kleen <pngwjpgh@users.noreply.github.com> | 2016-07-17 19:21:56 +0200 |
---|---|---|
committer | Gregor Kleen <pngwjpgh@users.noreply.github.com> | 2016-07-17 19:21:56 +0200 |
commit | 2b9ceaead3f3cd80e973cccecb9a3eebc51154f7 (patch) | |
tree | df2378943480647606b6a06f62c0f4b8b2ab406d /spec | |
parent | ac4cf4a0a494eafe55364f816569c517684fdf32 (diff) | |
download | thermoprint-2b9ceaead3f3cd80e973cccecb9a3eebc51154f7.tar thermoprint-2b9ceaead3f3cd80e973cccecb9a3eebc51154f7.tar.gz thermoprint-2b9ceaead3f3cd80e973cccecb9a3eebc51154f7.tar.bz2 thermoprint-2b9ceaead3f3cd80e973cccecb9a3eebc51154f7.tar.xz thermoprint-2b9ceaead3f3cd80e973cccecb9a3eebc51154f7.zip |
Fixes for GHC 8.0.1
Diffstat (limited to 'spec')
-rw-r--r-- | spec/src/Thermoprint/API.hs | 32 | ||||
-rw-r--r-- | spec/src/Thermoprint/Identifiers.hs | 8 | ||||
-rw-r--r-- | spec/src/Thermoprint/Printout.hs | 42 | ||||
-rw-r--r-- | spec/thermoprint-spec.cabal | 2 |
4 files changed, 54 insertions, 30 deletions
diff --git a/spec/src/Thermoprint/API.hs b/spec/src/Thermoprint/API.hs index 9e91487..8e98db8 100644 --- a/spec/src/Thermoprint/API.hs +++ b/spec/src/Thermoprint/API.hs | |||
@@ -100,12 +100,6 @@ instance Exception PrintingError | |||
100 | 100 | ||
101 | type DraftTitle = Text | 101 | type DraftTitle = Text |
102 | 102 | ||
103 | instance FromText UTCTime where | ||
104 | fromText = parseTimeM True defaultTimeLocale "%F_%T%Q" . T.unpack | ||
105 | |||
106 | instance ToText UTCTime where | ||
107 | toText = T.pack . formatTime defaultTimeLocale "%F_%T%Q" | ||
108 | |||
109 | data Range a = Min a | Max a | Through a a | 103 | data Range a = Min a | Max a | Through a a |
110 | deriving (Show, Eq, Generic) | 104 | deriving (Show, Eq, Generic) |
111 | 105 | ||
@@ -121,17 +115,19 @@ contains (Min min) x = min <= x | |||
121 | contains (Max max) x = max >= x | 115 | contains (Max max) x = max >= x |
122 | contains (Through min max) x = min <= x && x <= max | 116 | contains (Through min max) x = min <= x && x <= max |
123 | 117 | ||
124 | instance ToText a => ToText (Range a) where | 118 | instance ToHttpApiData a => ToHttpApiData (Range a) where |
125 | toText (Min min) = toText min <> "-" | 119 | toUrlPiece (Min min) = toUrlPiece min <> "-" |
126 | toText (Max max) = "-" <> toText max | 120 | toUrlPiece (Max max) = "-" <> toUrlPiece max |
127 | toText (Through min max) = toText min <> "-" <> toText max | 121 | toUrlPiece (Through min max) = toUrlPiece min <> "-" <> toUrlPiece max |
128 | 122 | ||
129 | instance FromText a => FromText (Range a) where | 123 | instance FromHttpApiData a => FromHttpApiData (Range a) where |
130 | fromText t = listToMaybe $ through <> max <> min | 124 | parseUrlPiece t = listToEither $ through <> max <> min |
131 | where | 125 | where |
132 | through = [ Through min max | ((fromText -> Just min), (T.uncons -> Just ('-', (fromText -> Just max)))) <- zip (T.inits t) (T.tails t) ] | 126 | through = [ Through min max | ((parseUrlPiece -> Right min), (T.uncons -> Just ('-', (parseUrlPiece -> Right max)))) <- zip (T.inits t) (T.tails t) ] |
133 | min = [ Min min | (fromText -> Just min) <- T.inits t ] | 127 | min = [ Min min | (parseUrlPiece -> Right min) <- T.inits t ] |
134 | max = [ Max max | (fromText -> Just max) <- T.tails t ] | 128 | max = [ Max max | (parseUrlPiece -> Right max) <- T.tails t ] |
129 | listToEither [x] = Right x | ||
130 | listToEither _ = Left t | ||
135 | 131 | ||
136 | type ThermoprintAPI = "printers" :> Get '[JSON] (Map PrinterId PrinterStatus) | 132 | type ThermoprintAPI = "printers" :> Get '[JSON] (Map PrinterId PrinterStatus) |
137 | :<|> "jobs" :> ( | 133 | :<|> "jobs" :> ( |
@@ -144,16 +140,16 @@ type ThermoprintAPI = "printers" :> Get '[JSON] (Map PrinterId PrinterStatus) | |||
144 | :<|> "job" :> Capture "jobId" JobId :> ( | 140 | :<|> "job" :> Capture "jobId" JobId :> ( |
145 | Get '[JSON] Printout | 141 | Get '[JSON] Printout |
146 | :<|> "status" :> Get '[JSON] JobStatus | 142 | :<|> "status" :> Get '[JSON] JobStatus |
147 | :<|> Delete '[PlainText] () | 143 | :<|> Delete '[JSON] () |
148 | ) | 144 | ) |
149 | :<|> "drafts" :> ( | 145 | :<|> "drafts" :> ( |
150 | Get '[JSON] (Map DraftId (Maybe DraftTitle)) | 146 | Get '[JSON] (Map DraftId (Maybe DraftTitle)) |
151 | :<|> QueryParam "title" DraftTitle :> ReqBody '[JSON] Printout :> Post '[JSON] DraftId | 147 | :<|> QueryParam "title" DraftTitle :> ReqBody '[JSON] Printout :> Post '[JSON] DraftId |
152 | ) | 148 | ) |
153 | :<|> "draft" :> Capture "draftId" DraftId :> ( | 149 | :<|> "draft" :> Capture "draftId" DraftId :> ( |
154 | QueryParam "title" DraftTitle :> ReqBody '[JSON] Printout :> Put '[PlainText] () | 150 | QueryParam "title" DraftTitle :> ReqBody '[JSON] Printout :> Put '[JSON] () |
155 | :<|> Get '[JSON] (Maybe DraftTitle, Printout) | 151 | :<|> Get '[JSON] (Maybe DraftTitle, Printout) |
156 | :<|> Delete '[PlainText] () | 152 | :<|> Delete '[JSON] () |
157 | :<|> QueryParam "printer" PrinterId :> Post '[JSON] JobId | 153 | :<|> QueryParam "printer" PrinterId :> Post '[JSON] JobId |
158 | ) | 154 | ) |
159 | 155 | ||
diff --git a/spec/src/Thermoprint/Identifiers.hs b/spec/src/Thermoprint/Identifiers.hs index ed8534e..2a07318 100644 --- a/spec/src/Thermoprint/Identifiers.hs +++ b/spec/src/Thermoprint/Identifiers.hs | |||
@@ -12,17 +12,17 @@ import Data.Typeable (Typeable) | |||
12 | import GHC.Generics (Generic) | 12 | import GHC.Generics (Generic) |
13 | import Control.DeepSeq (NFData) | 13 | import Control.DeepSeq (NFData) |
14 | 14 | ||
15 | import Servant.API (ToText, FromText) | 15 | import Servant.API (ToHttpApiData, FromHttpApiData) |
16 | import Data.Aeson (FromJSON, ToJSON) | 16 | import Data.Aeson (FromJSON, ToJSON) |
17 | 17 | ||
18 | newtype PrinterId = PrinterId Integer | 18 | newtype PrinterId = PrinterId Integer |
19 | deriving (Show, Read, Eq, Ord, Num, Real, Integral, Enum, FromText, ToText, FromJSON, ToJSON, Typeable, Generic, NFData) | 19 | deriving (Show, Read, Eq, Ord, Num, Real, Integral, Enum, FromHttpApiData, ToHttpApiData, FromJSON, ToJSON, Typeable, Generic, NFData) |
20 | 20 | ||
21 | newtype JobId = JobId Integer | 21 | newtype JobId = JobId Integer |
22 | deriving (Show, Read, Eq, Ord, Num, Real, Integral, Enum, FromText, ToText, FromJSON, ToJSON, Typeable, Generic, NFData) | 22 | deriving (Show, Read, Eq, Ord, Num, Real, Integral, Enum, FromHttpApiData, ToHttpApiData, FromJSON, ToJSON, Typeable, Generic, NFData) |
23 | 23 | ||
24 | newtype DraftId = DraftId Integer | 24 | newtype DraftId = DraftId Integer |
25 | deriving (Show, Read, Eq, Ord, Num, Real, Integral, Enum, FromText, ToText, FromJSON, ToJSON, Typeable, Generic, NFData) | 25 | deriving (Show, Read, Eq, Ord, Num, Real, Integral, Enum, FromHttpApiData, ToHttpApiData, FromJSON, ToJSON, Typeable, Generic, NFData) |
26 | 26 | ||
27 | castId :: (Integral a, Enum b) => a -> b | 27 | castId :: (Integral a, Enum b) => a -> b |
28 | castId = toEnum . fromInteger . toInteger | 28 | castId = toEnum . fromInteger . toInteger |
diff --git a/spec/src/Thermoprint/Printout.hs b/spec/src/Thermoprint/Printout.hs index 2be0a83..8c33e07 100644 --- a/spec/src/Thermoprint/Printout.hs +++ b/spec/src/Thermoprint/Printout.hs | |||
@@ -1,6 +1,6 @@ | |||
1 | {-# LANGUAGE DeriveGeneric, DeriveAnyClass #-} | 1 | {-# LANGUAGE DeriveGeneric, DeriveAnyClass #-} |
2 | {-# LANGUAGE OverloadedStrings #-} | 2 | {-# LANGUAGE OverloadedStrings #-} |
3 | {-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-} | 3 | {-# LANGUAGE FlexibleInstances, FlexibleContexts, UndecidableInstances #-} |
4 | {-# OPTIONS_HADDOCK show-extensions #-} | 4 | {-# OPTIONS_HADDOCK show-extensions #-} |
5 | 5 | ||
6 | -- | This module contains the definition of the structure -- 'Printout' -- used to represent the content of a job | 6 | -- | This module contains the definition of the structure -- 'Printout' -- used to represent the content of a job |
@@ -63,19 +63,47 @@ import Prelude hiding (fold) | |||
63 | 63 | ||
64 | 64 | ||
65 | -- | A 'Printout' is a sequence of visually seperated 'Paragraph's | 65 | -- | A 'Printout' is a sequence of visually seperated 'Paragraph's |
66 | type Printout = Seq Paragraph | 66 | newtype Printout = Printout { getParagraphs :: Seq Paragraph } |
67 | deriving (Show, Generic, NFData) | ||
68 | |||
69 | instance Eq Paragraph => Eq Printout where | ||
70 | (==) = (==) `on` getParagraphs | ||
71 | |||
72 | instance Monoid Printout where | ||
73 | mempty = Printout mempty | ||
74 | mappend a b = Printout $ (mappend `on` getParagraphs) a b | ||
75 | |||
76 | instance FromJSON Printout where | ||
77 | parseJSON = fmap Printout . parseJSON | ||
78 | |||
79 | instance ToJSON Printout where | ||
80 | toJSON = toJSON . getParagraphs | ||
81 | |||
82 | instance Arbitrary Printout where | ||
83 | arbitrary = Printout <$> arbitrary | ||
67 | 84 | ||
68 | -- | A 'Paragraph' is a non-seperated sequence of 'Chunk's | 85 | -- | A 'Paragraph' is a non-seperated sequence of 'Chunk's |
69 | type Paragraph = Seq Chunk | 86 | newtype Paragraph = Paragraph { getChunks :: Seq Chunk } |
87 | deriving (Show, Generic, NFData) | ||
88 | |||
89 | instance Eq Chunk => Eq Paragraph where | ||
90 | (==) = (==) `on` getChunks | ||
91 | |||
92 | instance Monoid Paragraph where | ||
93 | mempty = Paragraph mempty | ||
94 | mappend a b = Paragraph $ (mappend `on` getChunks) a b | ||
95 | |||
96 | instance Arbitrary Paragraph where | ||
97 | arbitrary = Paragraph <$> arbitrary | ||
70 | 98 | ||
71 | instance FromJSON Paragraph where | 99 | instance FromJSON Paragraph where |
72 | parseJSON o@(Array _) = Seq.fromList <$> parseJSON o | 100 | parseJSON o@(Array _) = Paragraph . Seq.fromList <$> parseJSON o |
73 | parseJSON o@(Object _) = Seq.singleton <$> parseJSON o | 101 | parseJSON o@(Object _) = Paragraph . Seq.singleton <$> parseJSON o |
74 | parseJSON o@(String _) = Seq.singleton <$> parseJSON o | 102 | parseJSON o@(String _) = Paragraph . Seq.singleton <$> parseJSON o |
75 | parseJSON v = typeMismatch "Paragraph" v | 103 | parseJSON v = typeMismatch "Paragraph" v |
76 | 104 | ||
77 | instance ToJSON Paragraph where | 105 | instance ToJSON Paragraph where |
78 | toJSON cs | 106 | toJSON (Paragraph cs) |
79 | | (a :< as) <- viewl cs | 107 | | (a :< as) <- viewl cs |
80 | , Seq.null as = toJSON a | 108 | , Seq.null as = toJSON a |
81 | | otherwise = toJSON $ toList cs | 109 | | otherwise = toJSON $ toList cs |
diff --git a/spec/thermoprint-spec.cabal b/spec/thermoprint-spec.cabal index e236e05..28680fb 100644 --- a/spec/thermoprint-spec.cabal +++ b/spec/thermoprint-spec.cabal | |||
@@ -2,7 +2,7 @@ | |||
2 | -- documentation, see http://haskell.org/cabal/users-guide/ | 2 | -- documentation, see http://haskell.org/cabal/users-guide/ |
3 | 3 | ||
4 | name: thermoprint-spec | 4 | name: thermoprint-spec |
5 | version: 3.0.0 | 5 | version: 4.0.0 |
6 | synopsis: A specification of the API and the payload datatypes and associated utilities | 6 | synopsis: A specification of the API and the payload datatypes and associated utilities |
7 | -- description: | 7 | -- description: |
8 | homepage: http://dirty-haskell.org/tags/thermoprint.html | 8 | homepage: http://dirty-haskell.org/tags/thermoprint.html |