@@ -17,6 +17,7 @@ import Control.Lens hiding (iso, mapping, op, pre,
1717import Data.Foldable (find, foldl', foldr')
1818import Data.Hashable
1919import qualified Data.HashMap.Strict as Map
20+import Data.List (delete)
2021import Data.Maybe
2122import Data.Maybe
2223import Data.Semigroup ((<>))
@@ -93,20 +94,19 @@ verbAlias n m
9394 media | Just b <- _mRequest m =
9495 let g = ref b
9596 in if _mSupportsMediaUpload m
96− then [TyApp (TyApp (TyCon "Multipart") json) (parts g)]
97− else [TyApp (TyApp (TyCon "ReqBody") json) (tycon g)]
97+ then [TyApp (TyApp (TyApp (TyCon "MultipartRelated") json)
98+ (tycon g))
99+ (TyCon "Body")]
100+ else [TyApp (TyApp (TyCon "ReqBody") json) (tycon g)]
98101 | otherwise = []
99− where
100− parts g = TyCon . UnQual . name . Text.unpack $
101− "'[" <> global g <> ", Body]"
102102
103103 verb = TyApp (TyApp meth json) $
104104 maybe (TyCon "()") (tycon . ref) (_mResponse m)
105105
106106 meth = TyCon . unqual . Text.unpack $ Text.toTitle (_mHttpMethod m)
107107
108− octet = TyCon "'[OctetStream]"
109− json = TyCon "'[JSON]"
108+ octet = tylist ["OctetStream"]
109+ json = tylist ["JSON"]
110110
111111 alt = TyApp (TyApp (TyCon "QueryParam") (sing "alt")) (TyCon "Media")
112112
@@ -141,7 +141,7 @@ requestDecl n p api url fs m =
141141 rs = InsType noLoc (TyApp (TyCon "Rs") (tycon n)) $
142142 maybe unit_tycon (tycon . ref) (_mResponse m)
143143
144− alt = var . name . Text.unpack . Text.toUpper <$>
144+ alt = var . name . Text.unpack . alternate <$>
145145 (Map.lookup "alt" (_mParameters m) >>= view iDefault)
146146
147147googleRequestDecl :: Global
@@ -181,7 +181,9 @@ googleRequestDecl g n assoc alt p api url fs m =
181181 pat | _mSupportsMediaDownload m = PInfixApp (pvar "go") (UnQual (sym ":<|>")) PWildCard
182182 | otherwise = pvar "go"
183183
184− rhs = UnGuardedRhs $ appFun (var "go") (map go fs ++ maybeToList alt)
184+ rhs = UnGuardedRhs . appFun (var "go") $ map go fs'
185+ ++ maybeToList (app (var "Just") <$> alt)
186+ ++ maybeToList (go <$> rq)
185187 where
186188 go l | Just p <- Map.lookup l ps
187189 , _pLocation p == Query
@@ -191,6 +193,9 @@ googleRequestDecl g n assoc alt p api url fs m =
191193 ps = _mParameters m
192194 v = var . fname p
193195
196+ (fs', rq) | Just r <- _mRequest m = let x = localise (ref r) in (delete x fs, Just x)
197+ | otherwise = (fs, Nothing)
198+
194199 pats = [pvar "r", pvar "u", prec]
195200 prec = PRec (UnQual (dname g)) [PFieldWildcard]
196201
@@ -201,7 +206,7 @@ authDecl g p fs = InstDecl noLoc Nothing [] [] (unqual "GoogleAuth") [tycon g]
201206 ]
202207 where
203208 method l f
204− | f `elem` fs = funD l (var (lname p f))
209+ | f `elem` fs = funD l (infixApp (var (lname p f)) "." (var "_Just"))
205210 | otherwise = funD l (app (var "const") (var "pure"))
206211
207212jsonDecls :: Global -> Prefix -> Map Local Solved -> [Decl]
@@ -444,6 +449,10 @@ strict = TyBang BangedTy . \case
444449sing :: Text -> Type
445450sing = TyCon . unqual . Text.unpack . flip mappend "\"" . mappend "\""
446451
452+tylist :: [Text] -> Type
453+tylist xs = TyCon . UnQual . name . Text.unpack $
454+ "'[" <> Text.intercalate ", " xs <> "]"
455+
447456tycon :: Global -> Type
448457tycon = TyCon . UnQual . dname
449458