on master help sign in
Replace use of ToByteString with HttpApiData for GetHeaders, fixes servant/#581

* Version bump because this changes the API for GetHeaders

commita1b23018f97add4ccc56fbb50906f8fe0aa89ab5 authorAlex Mason <Alex.Mason@data61.csiro.au> dateFri 2 Sep 2016, 19:46 (10 years ago) parent9e7356c
4 files changed+15−12
servant-mock/test/Servant/MockSpec.hs+5−4 servant/CHANGELOG.md+1 servant/servant.cabal+1−1 servant/src/Servant/API/ResponseHeaders.hs+8−7
servant-mock/test/Servant/MockSpec.hs+5−4
@@ -8,9 +8,7 @@
88module Servant.MockSpec where
99
1010import Data.Aeson as Aeson
11−import Data.ByteString.Conversion.To
1211import Data.Proxy
13−import Data.String
1412import GHC.Generics
1513import Network.Wai
1614import Servant.API
@@ -40,8 +38,11 @@ data TestHeader
4038 | ArbitraryHeader
4139 deriving (Show)
4240
43−instance ToByteString TestHeader where
44− builder = fromString . show
41+instance ToHttpApiData TestHeader where
42+ toHeader = toHeader . show
43+ toUrlPiece _ = error "ToHttpApiData.toUrlPiece not implemented for TestHeader"
44+ toQueryParam _ = error "ToHttpApiData.toQueryParam not implemented for TestHeader"
45+
4546
4647instance Arbitrary TestHeader where
4748 arbitrary = return ArbitraryHeader
servant/CHANGELOG.md+1
@@ -2,6 +2,7 @@ next
22----
33
44* Add `CaptureAll` combinator. Captures all of the remaining segments in a URL.
5+* replace use of `ToByteString` with `HttpApiData` for `GetHeaders`
56
670.8
78---
servant/servant.cabal+1−1
@@ -1,5 +1,5 @@
11name: servant
2−version: 0.8
2+version: 0.8.1
33synopsis: A family of combinators for defining webservices APIs
44description:
55 A family of combinators for defining webservices APIs and serving them
servant/src/Servant/API/ResponseHeaders.hs+8−7
@@ -31,8 +31,9 @@ module Servant.API.ResponseHeaders
3131 ) where
3232
3333import Data.ByteString.Char8 as BS (pack, unlines, init)
34−import Data.ByteString.Conversion (ToByteString, toByteString',
34+import Data.ByteString.Conversion (--ToByteString, toByteString',
3535 FromByteString, fromByteString)
36+import Web.HttpApiData (ToHttpApiData,toHeader)
3637import qualified Data.CaseInsensitive as CI
3738import Data.Proxy
3839import GHC.TypeLits (KnownSymbol, symbolVal)
@@ -88,18 +89,18 @@ class GetHeaders ls where
8889instance OVERLAPPING_ GetHeaders (HList '[]) where
8990 getHeaders _ = []
9091
91−instance OVERLAPPABLE_ ( KnownSymbol h, ToByteString x, GetHeaders (HList xs) )
92+instance OVERLAPPABLE_ ( KnownSymbol h, ToHttpApiData x, GetHeaders (HList xs) )
9293 => GetHeaders (HList (Header h x ': xs)) where
9394 getHeaders hdrs = case hdrs of
94− Header val `HCons` rest -> (headerName , toByteString' val):getHeaders rest
95− UndecodableHeader h `HCons` rest -> (headerName, h) : getHeaders rest
95+ Header val `HCons` rest -> (headerName , toHeader val):getHeaders rest
96+ UndecodableHeader h `HCons` rest -> (headerName, h) :getHeaders rest
9697 MissingHeader `HCons` rest -> getHeaders rest
9798 where headerName = CI.mk . pack $ symbolVal (Proxy :: Proxy h)
9899
99100instance OVERLAPPING_ GetHeaders (Headers '[] a) where
100101 getHeaders _ = []
101102
102−instance OVERLAPPABLE_ ( KnownSymbol h, GetHeaders (HList rest), ToByteString v )
103+instance OVERLAPPABLE_ ( KnownSymbol h, GetHeaders (HList rest), ToHttpApiData v )
103104 => GetHeaders (Headers (Header h v ': rest) a) where
104105 getHeaders hs = getHeaders $ getHeadersHList hs
105106
@@ -111,11 +112,11 @@ class AddHeader h v orig new
111112 addHeader :: v -> orig -> new -- ^ N.B.: The same header can't be added multiple times
112113
113114
114−instance OVERLAPPING_ ( KnownSymbol h, ToByteString v )
115+instance OVERLAPPING_ ( KnownSymbol h, ToHttpApiData v )
115116 => AddHeader h v (Headers (fst ': rest) a) (Headers (Header h v ': fst ': rest) a) where
116117 addHeader a (Headers resp heads) = Headers resp (HCons (Header a) heads)
117118
118−instance OVERLAPPABLE_ ( KnownSymbol h, ToByteString v
119+instance OVERLAPPABLE_ ( KnownSymbol h, ToHttpApiData v
119120 , new ~ (Headers '[Header h v] a) )
120121 => AddHeader h v a new where
121122 addHeader a resp = Headers resp (HCons (Header a) HNil)