servant-cassava 0.4.4.7 → 0.5
raw patch · 4 files changed
+44/−8 lines, 4 filesdep ~servantPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: servant
API changes (from Hackage documentation)
+ Servant.CSV.Cassava: instance (Data.Csv.Conversion.DefaultOrdered a, Data.Csv.Conversion.ToNamedRecord a, Servant.CSV.Cassava.EncodeOpts opt) => Servant.API.ContentTypes.MimeRender (Servant.CSV.Cassava.CSV', opt) (Data.Vector.Vector a)
+ Servant.CSV.Cassava: instance (Data.Csv.Conversion.FromNamedRecord a, Servant.CSV.Cassava.DecodeOpts opt) => Servant.API.ContentTypes.MimeUnrender (Servant.CSV.Cassava.CSV', opt) (Data.Csv.Types.Header, [a])
+ Servant.CSV.Cassava: instance (Data.Csv.Conversion.FromRecord a, Servant.CSV.Cassava.DecodeOpts opt) => Servant.API.ContentTypes.MimeUnrender (Servant.CSV.Cassava.CSV', opt) [a]
+ Servant.CSV.Cassava: instance (Data.Csv.Conversion.ToNamedRecord a, Servant.CSV.Cassava.EncodeOpts opt) => Servant.API.ContentTypes.MimeRender (Servant.CSV.Cassava.CSV', opt) (Data.Csv.Types.Header, Data.Vector.Vector a)
Files
- LICENSE +1/−1
- include/overlapping-compat.h +8/−0
- servant-cassava.cabal +7/−6
- src/Servant/CSV/Cassava.hs +28/−1
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2015, Julian K. Arni+Copyright (c) 2015-2016, Servant Contributors All rights reserved.
+ include/overlapping-compat.h view
@@ -0,0 +1,8 @@+#if __GLASGOW_HASKELL__ >= 710+#define OVERLAPPABLE_ {-# OVERLAPPABLE #-}+#define OVERLAPPING_ {-# OVERLAPPING #-}+#else+{-# LANGUAGE OverlappingInstances #-}+#define OVERLAPPABLE_+#define OVERLAPPING_+#endif
servant-cassava.cabal view
@@ -2,18 +2,18 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: servant-cassava-version: 0.4.4.7+version: 0.5 synopsis: Servant CSV content-type for cassava -- description: homepage: http://haskell-servant.github.io/ license: BSD3 license-file: LICENSE-author: Julian K. Arni-maintainer: jkarni@gmail.com--- copyright:+author: Servant Contributors+maintainer: haskell-servant-maintainers@googlegroups.com+copyright: 2015-2016 Servant Contributors -- category: build-type: Simple--- extra-source-files:+extra-source-files: include/*.h cabal-version: >=1.10 library@@ -22,8 +22,9 @@ -- other-extensions: build-depends: base >=4.6 && <5 , cassava >0.4 && <0.5- , servant == 0.4.*+ , servant ==0.5.* , http-media , vector hs-source-dirs: src default-language: Haskell2010+ include-dirs: include
src/Servant/CSV/Cassava.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleInstances #-}@@ -16,10 +17,13 @@ -- >>> type EgDefault = Get '[CSV] [(Int, String)] module Servant.CSV.Cassava where +#if !MIN_VERSION_base(4,8,0)+import Control.Applicative ((<$>))+#endif import Data.Csv import Data.Proxy (Proxy (..)) import Data.Typeable (Typeable)-import Data.Vector (Vector)+import Data.Vector (Vector, toList) import GHC.Generics (Generic) import qualified Network.HTTP.Media as M import Servant.API (Accept (..), MimeRender (..),@@ -50,7 +54,19 @@ mimeRender _ = encodeDefaultOrderedByNameWith (encodeOpts p) where p = Proxy :: Proxy opt +-- | Encode with 'encodeByNameWith'. The 'Header' param is used for determining+-- the order of headers and fields.+instance ( ToNamedRecord a, EncodeOpts opt+ ) => MimeRender (CSV', opt) (Header, Vector a) where+ mimeRender _ (hdr, vals) = encodeByNameWith (encodeOpts p) hdr (toList vals)+ where p = Proxy :: Proxy opt +-- | Encode with 'encodeDefaultOrderedByNameWith'+instance ( DefaultOrdered a, ToNamedRecord a, EncodeOpts opt+ ) => MimeRender (CSV', opt) (Vector a) where+ mimeRender _ = encodeDefaultOrderedByNameWith (encodeOpts p) . toList+ where p = Proxy :: Proxy opt+ -- ** Encode Options class EncodeOpts a where@@ -66,6 +82,17 @@ -- ** Instances -- | Decode with 'decodeByNameWith'+instance ( FromNamedRecord a, DecodeOpts opt+ ) => MimeUnrender (CSV', opt) (Header, [a]) where+ mimeUnrender _ bs = fmap toList <$> decodeByNameWith (decodeOpts p) bs+ where p = Proxy :: Proxy opt++-- | Decode with 'decodeWith'. Assumes data has headers, which are stripped.+instance ( FromRecord a, DecodeOpts opt+ ) => MimeUnrender (CSV', opt) [a] where+ mimeUnrender _ bs = toList <$> decodeWith (decodeOpts p) HasHeader bs+ where p = Proxy :: Proxy opt+ instance ( FromNamedRecord a, DecodeOpts opt ) => MimeUnrender (CSV', opt) (Header, Vector a) where mimeUnrender _ = decodeByNameWith (decodeOpts p)