on develop help sign in
Correctly rendering alt=media vs uploadType=multipart query parameters
400d2f9Brendan Hay
gen/src/Gen/Syntax.hs+4−5
@@ -106,9 +106,8 @@ uploadAlias sub m
106
106
107 media = case _mRequest m of
107 media = case _mRequest m of
108 Just b ->
108 Just b ->
109− TyApp (TyApp (TyApp (TyCon "MultipartRelated") jsonMedia)
109+ TyApp (TyApp (TyCon "MultipartRelated") jsonMedia)
110− (tycon (ref b)))
110+ (tycon (ref b))
111− (TyCon "RequestBody")
112
111
113 Nothing ->
112 Nothing ->
114 TyApp (TyApp (TyCon "ReqBody") streamMedia)
113 TyApp (TyApp (TyCon "ReqBody") streamMedia)
@@ -185,7 +184,7 @@ altParam =
185uploadParam :: Type
184uploadParam :: Type
186uploadParam =
185uploadParam =
187 TyApp (TyApp (TyCon "QueryParam") (sing "uploadType"))
186 TyApp (TyApp (TyCon "QueryParam") (sing "uploadType"))
188− (TyCon "AltMedia")
187+ (TyCon "Multipart")
189
188
190metadataPat, downloadPat, uploadPat :: Method a -> Pat
189metadataPat, downloadPat, uploadPat :: Method a -> Pat
191metadataPat = pattern 1
190metadataPat = pattern 1
@@ -258,7 +257,7 @@ uploadDecl n pre api url fs m =
258
257
259 extras = maybeToList alt ++ [upl] ++ payload ++ [var media]
258 extras = maybeToList alt ++ [upl] ++ payload ++ [var media]
260 where
259 where
261− upl = app (var "Just") (var "AltMedia")
260+ upl = app (var "Just") (var "Multipart")
262 alt = app (var "Just") . var . name . Text.unpack . alternate <$>
261 alt = app (var "Just") . var . name . Text.unpack . alternate <$>
263 (Map.lookup "alt" (_mParameters m) >>= view iDefault)
262 (Map.lookup "alt" (_mParameters m) >>= view iDefault)
264
263
gen/src/Gen/Types/Id.hs+8−4
@@ -58,10 +58,12 @@ import Control.Applicative
58import Control.Monad
58import Control.Monad
59import Data.Aeson hiding (Bool, String)
59import Data.Aeson hiding (Bool, String)
60import qualified Data.Attoparsec.Text as A
60import qualified Data.Attoparsec.Text as A
61+import Data.Bifunctor (first)
61import qualified Data.CaseInsensitive as CI
62import qualified Data.CaseInsensitive as CI
62import Data.Foldable (foldl')
63import Data.Foldable (foldl')
63import Data.Function (on)
64import Data.Function (on)
64import Data.Hashable
65import Data.Hashable
66+import qualified Data.HashMap.Strict as Map
65import Data.List (intersperse)
67import Data.List (intersperse)
66import Data.List (elemIndex, nub, sortOn)
68import Data.List (elemIndex, nub, sortOn)
67import Data.Semigroup hiding (Sum)
69import Data.Semigroup hiding (Sum)
@@ -165,8 +167,9 @@ instance FromJSON Global where
165instance ToJSON Global where
167instance ToJSON Global where
166 toJSON = toJSON . global
168 toJSON = toJSON . global
167
169
168−instance TextKey Global where
170+instance FromJSON v => FromJSON (Map Global v) where
169− toKey = mkGlobal
171+ parseJSON = fmap (Map.fromList . map (first mkGlobal) . Map.toList)
172+ . parseJSON
170
173
171gid :: Format a (Global -> a)
174gid :: Format a (Global -> a)
172gid = later (Build.fromText . global)
175gid = later (Build.fromText . global)
@@ -174,8 +177,9 @@ gid = later (Build.fromText . global)
174newtype Local = Local { local :: Text }
177newtype Local = Local { local :: Text }
175 deriving (Eq, Ord, Show, Generic, Hashable, FromJSON, ToJSON, IsString)
178 deriving (Eq, Ord, Show, Generic, Hashable, FromJSON, ToJSON, IsString)
176
179
177−instance TextKey Local where
180+instance FromJSON v => FromJSON (Map Local v) where
178− toKey = Local
181+ parseJSON = fmap (Map.fromList . map (first Local) . Map.toList)
182+ . parseJSON
179
183
180lid :: Format a (Local -> a)
184lid :: Format a (Local -> a)
181lid = later (Build.fromText . local)
185lid = later (Build.fromText . local)
gen/src/Gen/Types/Map.hs+1−13
@@ -1,7 +1,4 @@
1−{-# LANGUAGE FlexibleInstances #-}
2−
3−
4− -- Module : Gen.Types.Map
1+-- Module : Gen.Types.Map
5-- Copyright : (c) 2013-2015 Brendan Hay
2-- Copyright : (c) 2013-2015 Brendan Hay
6-- License : This Source Code Form is subject to the terms of
3-- License : This Source Code Form is subject to the terms of
7-- the Mozilla Public License, v. 2.0.
4-- the Mozilla Public License, v. 2.0.
@@ -14,8 +11,6 @@
14module Gen.Types.Map where
11module Gen.Types.Map where
15
12
16import Control.Lens
13import Control.Lens
17−import Data.Aeson
18−import Data.Bifunctor
19import Data.Hashable
14import Data.Hashable
20import qualified Data.HashMap.Strict as Map
15import qualified Data.HashMap.Strict as Map
21import Data.Maybe
16import Data.Maybe
@@ -35,10 +30,3 @@ kvTraverseMaybe :: (Applicative f, Eq k, Hashable k)
35 -> f (Map k b)
30 -> f (Map k b)
36kvTraverseMaybe f = fmap (Map.map fromJust . Map.filter isJust)
31kvTraverseMaybe f = fmap (Map.map fromJust . Map.filter isJust)
37 . Map.traverseWithKey f
32 . Map.traverseWithKey f
38−
39−class (Hashable a, Eq a) => TextKey a where
40− toKey :: Text -> a
41−
42−instance (TextKey k, FromJSON v) => FromJSON (Map k v) where
43− parseJSON = fmap (Map.fromList . map (first toKey) . Map.toList)
44− . parseJSON