git.iko.soy/typeable/http-api-data
on master help sign in
Squashed commit of the following:

commit 581c92b0b34a0dad0b4fedbf0d3af1bc89ccc969 Author: Nickolay Kudasov <nickolay.kudasov@gmail.com> Date: Mon Sep 24 21:24:27 2018 +0300 Remove uri-bytestring dependency commit 53a5172796f8bb51b4dd1721cc5c557636d57190 Author: Nickolay Kudasov <nickolay.kudasov@gmail.com> Date: Mon Sep 24 19:27:46 2018 +0300 Fix FromHttpApiData doctest for Cookie commit cd7af7b5c6764db157f2fdcb127264096591317c Author: Nickolay Kudasov <nickolay.kudasov@gmail.com> Date: Mon Sep 24 19:24:32 2018 +0300 Apply stylish-haskell commit 0e6062958f2099468a59ab99a2da34ba6fc21735 Author: Nickolay Kudasov <nickolay.kudasov@gmail.com> Date: Mon Sep 24 19:24:19 2018 +0300 Update stack.yaml to LTS-12.9 commit 7f45837cc364c60df727c5ab3a94ebead4753934 Merge: 409923c 480bc45 Author: Nickolay Kudasov <nickolay.kudasov@gmail.com> Date: Mon Sep 24 19:18:43 2018 +0300 Merge branch 'issue-59' of https://github.com/Woody88/http-api-data into Woody88-issue-59 commit 480bc45a29f0690db3ff4e6e94f642c808c50f70 Author: Woodson Delhia <woodsondelhia88@mail.com> Date: Fri Mar 16 17:08:29 2018 -0400 fixed doctest failure commit 770211a0949dfaf2f55f1f7f3b38900b3d43142f Merge: 8641054 01a4ca3 Author: Woodson Delhia <woodsondelhia88@mail.com> Date: Fri Mar 16 16:50:33 2018 -0400 pulled changes from issue-59 and adjusted commit changes. commit 864105401b4971c94a381697477cfcb5458903f8 Author: Woodson Delhia <woodsondelhia88@mail.com> Date: Fri Mar 16 16:45:06 2018 -0400 rebased with master. Adjust cabal cookie version in build-deps. resolve updated resolver to lts-11.0. Removed any notion of PHP.... commit 01a4ca35025bc7cd9e61b1b1e51d02b29dd8119b Merge: e380eaf ffac6a5 Author: Woodson Delhia <woodsondelhia88@gmail.com> Date: Fri Mar 16 16:05:53 2018 -0400 Merge branch 'master' into issue-59 commit 48f7e264746e3828e4d4ce13469fbf4e20e86e72 Author: Woodson Delhia <woodsondelhia88@mail.com> Date: Fri Mar 16 15:47:05 2018 -0400 Added ToHttpApiData instance definition for SetCookie commit e3ace7f57d7185d681a8f5fdb3af91917df178d5 Author: Woodson Delhia <woodsondelhia88@mail.com> Date: Wed Mar 14 21:30:30 2018 -0400 Added FromHttpApiData instance for SetCookie type. Stack would not build project because of cabal-doctest-1. It recommeded that I add the latest matching version in the extra-deps. commit dbdd9aa2a7b3780500704b23677cfb57ae970266 Author: Woodson Delhia <woodsondelhia88@mail.com> Date: Wed Mar 14 19:39:09 2018 -0400 added cookie package to dependencies commit e380eaf53eaee83976f195534a799644c6f57711 Author: Woodson Delhia <woodsondelhia88@mail.com> Date: Fri Mar 16 15:47:05 2018 -0400 Added ToHttpApiData instance definition for SetCookie commit e38f97979104353db64607771f084ec8ab2ec14c Author: Woodson Delhia <woodsondelhia88@mail.com> Date: Wed Mar 14 21:30:30 2018 -0400 Added FromHttpApiData instance for SetCookie type. Stack would not build project because of cabal-doctest-1. It recommeded that I add the latest matching version in the extra-deps. commit 8fb645788bdb68044420629169fe1c233de7e678 Author: Woodson Delhia <woodsondelhia88@mail.com> Date: Wed Mar 14 19:39:09 2018 -0400 added cookie package to dependencies

commit2c0800ee500f6793491a62cb9bf42dd1684ee04f authorOleg Grenrus <oleg.grenrus@iki.fi> dateMon 24 Sep 2018, 23:01 (8 years ago) parent409923c
6 files changed+77−64
http-api-data.cabal+2−1 src/Web/FormUrlEncoded.hs+1−1 src/Web/HttpApiData.hs+1−1 src/Web/Internal/FormUrlEncoded.hs+13−13 src/Web/Internal/HttpApiData.hs+57−39 stack.yaml+3−9
http-api-data.cabal+2−1
@@ -51,7 +51,8 @@ library
5151 , time >= 1.4.2 && < 1.9
5252 , time-locale-compat >= 0.1.1.0 && < 0.2
5353 , unordered-containers >= 0.2.6.0 && < 0.3
54− , uuid-types >= 1.0.2 && <1.1
54+ , uuid-types >= 1.0.2 && < 1.1
55+ , cookie >= 0.4 && < 0.45
5556 if !impl(ghc >= 8.0)
5657 build-depends: semigroups >= 0.16 && < 0.19
5758 if flag(use-text-show)
src/Web/FormUrlEncoded.hs+1−1
@@ -47,5 +47,5 @@ module Web.FormUrlEncoded (
4747 urlDecodeParams,
4848) where
4949
50−import Web.Internal.FormUrlEncoded
50+import Web.Internal.FormUrlEncoded
5151
src/Web/HttpApiData.hs+1−1
@@ -43,7 +43,7 @@ module Web.HttpApiData (
4343 readTextData,
4444) where
4545
46−import Web.Internal.HttpApiData
46+import Web.Internal.HttpApiData
4747
4848-- $setup
4949--
src/Web/Internal/FormUrlEncoded.hs+13−13
@@ -1,5 +1,5 @@
1−{-# LANGUAGE ConstraintKinds #-}
21{-# LANGUAGE CPP #-}
2+{-# LANGUAGE ConstraintKinds #-}
33{-# LANGUAGE DataKinds #-}
44{-# LANGUAGE DefaultSignatures #-}
55{-# LANGUAGE DeriveGeneric #-}
@@ -18,14 +18,14 @@
1818module Web.Internal.FormUrlEncoded where
1919
2020#if __GLASGOW_HASKELL__ < 710
21−import Control.Applicative
22−import Data.Traversable
21+import Control.Applicative
22+import Data.Traversable
2323#endif
2424
2525
2626import Control.Arrow ((***))
2727import Control.Monad ((<=<))
28−import Data.ByteString.Builder (toLazyByteString, shortByteString)
28+import Data.ByteString.Builder (shortByteString, toLazyByteString)
2929import qualified Data.ByteString.Lazy as BSL
3030import qualified Data.ByteString.Lazy.Char8 as BSL8
3131import qualified Data.Foldable as F
@@ -39,30 +39,30 @@ import Data.List (intersperse, sortBy)
3939import Data.Map (Map)
4040import qualified Data.Map as Map
4141import Data.Monoid
42−import qualified Data.Semigroup as Semi
4342import Data.Ord (comparing)
43+import qualified Data.Semigroup as Semi
4444
4545import Data.Text (Text)
4646import qualified Data.Text as Text
47−import qualified Data.Text.Lazy as Lazy
4847import Data.Text.Encoding as Text
4948import Data.Text.Encoding.Error (lenientDecode)
49+import qualified Data.Text.Lazy as Lazy
5050
51−import Data.Time
5251import Data.Proxy
52+import Data.Time
5353import Data.Word
5454
5555#if MIN_VERSION_base(4,8,0)
56−import Data.Void
57−import Numeric.Natural
56+import Data.Void
57+import Numeric.Natural
5858#endif
5959
60−import GHC.Exts (IsList (..), Constraint)
60+import GHC.Exts (Constraint, IsList (..))
6161import GHC.Generics
6262import GHC.TypeLits
63−import Network.HTTP.Types.URI (urlEncodeBuilder, urlDecode)
63+import Network.HTTP.Types.URI (urlDecode, urlEncodeBuilder)
6464
65−import Web.Internal.HttpApiData
65+import Web.Internal.HttpApiData
6666
6767-- $setup
6868-- >>> :set -XDeriveGeneric
@@ -546,7 +546,7 @@ urlEncodeParams = toLazyByteString . mconcat . intersperse (shortByteString "&")
546546 escape = urlEncodeBuilder True . Text.encodeUtf8
547547
548548 encodePair (k, "") = escape k
549− encodePair (k, v) = escape k <> shortByteString "=" <> escape v
549+ encodePair (k, v) = escape k <> shortByteString "=" <> escape v
550550
551551-- | Decode an @application/x-www-form-urlencoded@ 'BSL.ByteString' to a 'Form'.
552552--
src/Web/Internal/HttpApiData.hs+57−39
@@ -1,12 +1,12 @@
1−{-# LANGUAGE CPP #-}
2−{-# LANGUAGE DefaultSignatures #-}
3−{-# LANGUAGE DeriveDataTypeable #-}
4−{-# LANGUAGE DeriveFunctor #-}
5−{-# LANGUAGE DeriveFoldable #-}
6−{-# LANGUAGE DeriveTraversable #-}
7−{-# LANGUAGE FlexibleInstances #-}
8−{-# LANGUAGE OverloadedStrings #-}
9−{-# LANGUAGE ScopedTypeVariables #-}
1+{-# LANGUAGE CPP #-}
2+{-# LANGUAGE DefaultSignatures #-}
3+{-# LANGUAGE DeriveDataTypeable #-}
4+{-# LANGUAGE DeriveFoldable #-}
5+{-# LANGUAGE DeriveFunctor #-}
6+{-# LANGUAGE DeriveTraversable #-}
7+{-# LANGUAGE FlexibleInstances #-}
8+{-# LANGUAGE OverloadedStrings #-}
9+{-# LANGUAGE ScopedTypeVariables #-}
1010{-# LANGUAGE TypeSynonymInstances #-}
1111-- |
1212-- Convert Haskell values to and from HTTP API data
@@ -14,52 +14,56 @@
1414module Web.Internal.HttpApiData where
1515
1616#if __GLASGOW_HASKELL__ < 710
17−import Control.Applicative
18−import Data.Foldable (Foldable)
19−import Data.Traversable (Traversable(traverse))
17+import Control.Applicative
18+import Data.Foldable (Foldable)
19+import Data.Traversable (Traversable (traverse))
2020#endif
2121
22−import Control.Arrow ((&&&), left)
23−import Control.Monad ((<=<))
22+import Control.Arrow (left, (&&&))
23+import Control.Monad ((<=<))
2424
25−import Data.Monoid
26−import Data.ByteString (ByteString)
27−import qualified Data.ByteString as BS
25+import Data.ByteString (ByteString)
26+import qualified Data.ByteString as BS
27+import Data.Monoid
2828
29−import Data.Int
30−import Data.Word
29+import Data.Int
30+import Data.Word
3131
32−import Data.Text (Text)
33−import Data.Text.Encoding (encodeUtf8, decodeUtf8')
34−import Data.Text.Read (signed, decimal, rational, Reader)
35−import qualified Data.Text as T
36−import qualified Data.Text.Lazy as L
32+import Data.Text (Text)
33+import qualified Data.Text as T
34+import Data.Text.Encoding (decodeUtf8', encodeUtf8)
35+import qualified Data.Text.Lazy as L
36+import Data.Text.Read (Reader, decimal, rational,
37+ signed)
3738
38−import Data.Time.Locale.Compat
39−import Data.Time
40−import Data.Version
39+import Data.Time
40+import Data.Time.Locale.Compat
41+import Data.Version
4142
4243#if MIN_VERSION_base(4,8,0)
43−import Data.Void
44−import Numeric.Natural
44+import Data.Void
45+import Numeric.Natural
4546#endif
4647
47−import Text.Read (readMaybe)
48−import Text.ParserCombinators.ReadP (readP_to_S)
48+import Text.ParserCombinators.ReadP (readP_to_S)
49+import Text.Read (readMaybe)
4950
5051#if USE_TEXT_SHOW
51−import TextShow (TextShow, showt)
52+import TextShow (TextShow, showt)
5253#endif
5354
54−import qualified Data.UUID.Types as UUID
55+import qualified Data.UUID.Types as UUID
5556
56−import Data.Typeable (Typeable)
57−import Data.Data (Data)
58−import qualified Data.ByteString.Builder as BS
59−import qualified Network.HTTP.Types as H
57+import qualified Data.ByteString.Builder as BS
58+import Data.Data (Data)
59+import Data.Typeable (Typeable)
60+import qualified Network.HTTP.Types as H
6061
61−import qualified Data.Attoparsec.Text as Atto
62−import qualified Data.Attoparsec.Time as Atto
62+import qualified Data.Attoparsec.Text as Atto
63+import qualified Data.Attoparsec.Time as Atto
64+
65+import Web.Cookie (SetCookie, parseSetCookie,
66+ renderSetCookie)
6367
6468
6569-- $setup
@@ -530,6 +534,14 @@ instance (ToHttpApiData a, ToHttpApiData b) => ToHttpApiData (Either a b) where
530534 toUrlPiece (Left x) = "left " <> toUrlPiece x
531535 toUrlPiece (Right x) = "right " <> toUrlPiece x
532536
537+-- |
538+-- >>> let Right c = parseUrlPiece "SESSID=r2t5uvjq435r4q7ib3vtdjq120" :: Either Text SetCookie
539+-- >>> toUrlPiece c
540+-- "\"SESSID=r2t5uvjq435r4q7ib3vtdjq120\""
541+instance ToHttpApiData SetCookie where
542+ toUrlPiece = showt . BS.toLazyByteString . renderSetCookie
543+ toEncodedUrlPiece = renderSetCookie
544+
533545-- |
534546-- >>> parseUrlPiece "_" :: Either Text ()
535547-- Right ()
@@ -664,6 +676,12 @@ instance FromHttpApiData a => FromHttpApiData (LenientData a) where
664676 parseHeader = Right . LenientData . parseHeader
665677 parseQueryParam = Right . LenientData . parseQueryParam
666678
679+-- |
680+-- >>> parseUrlPiece "SESSID=r2t5uvjq435r4q7ib3vtdjq120" :: Either Text SetCookie
681+-- Right (SetCookie {setCookieName = "SESSID", setCookieValue = "r2t5uvjq435r4q7ib3vtdjq120", setCookiePath = Nothing, setCookieExpires = Nothing, setCookieMaxAge = Nothing, setCookieDomain = Nothing, setCookieHttpOnly = False, setCookieSecure = False, setCookieSameSite = Nothing})
682+instance FromHttpApiData SetCookie where
683+ parseUrlPiece = parseHeader . encodeUtf8
684+ parseHeader = Right . parseSetCookie
667685-------------------------------------------------------------------------------
668686-- Attoparsec helpers
669687-------------------------------------------------------------------------------
stack.yaml+3−9
@@ -1,12 +1,6 @@
1−resolver: nightly-2017-04-01
2−
3−packages:
4−- '.'
5−
61flags:
72 http-api-data:
83 use-text-show: false
9−
10−extra-deps:
11−- attoparsec-iso8601-1.0.0.0
12−extra-package-dbs: []
4+packages:
5+- .
6+resolver: lts-12.9