@@ -17,6 +17,7 @@ import Control.Lens hiding (iso, mapping, op, pre,
17import Data.Foldable (find, foldl', foldr')
17import Data.Foldable (find, foldl', foldr')
18import Data.Hashable
18import Data.Hashable
19import qualified Data.HashMap.Strict as Map
19import qualified Data.HashMap.Strict as Map
20+import Data.List (delete)
20import Data.Maybe
21import Data.Maybe
21import Data.Maybe
22import Data.Maybe
22import Data.Semigroup ((<>))
23import Data.Semigroup ((<>))
@@ -93,20 +94,19 @@ verbAlias n m
93 media | Just b <- _mRequest m =
94 media | Just b <- _mRequest m =
94 let g = ref b
95 let g = ref b
95 in if _mSupportsMediaUpload m
96 in if _mSupportsMediaUpload m
96− then [TyApp (TyApp (TyCon "Multipart") json) (parts g)]
97+ then [TyApp (TyApp (TyApp (TyCon "MultipartRelated") json)
97− else [TyApp (TyApp (TyCon "ReqBody") json) (tycon g)]
100+ else [TyApp (TyApp (TyCon "ReqBody") json) (tycon g)]
98 | otherwise = []
101 | otherwise = []
100− parts g = TyCon . UnQual . name . Text.unpack $
101− "'[" <> global g <> ", Body]"
103 verb = TyApp (TyApp meth json) $
103 verb = TyApp (TyApp meth json) $
104 maybe (TyCon "()") (tycon . ref) (_mResponse m)
104 maybe (TyCon "()") (tycon . ref) (_mResponse m)
106 meth = TyCon . unqual . Text.unpack $ Text.toTitle (_mHttpMethod m)
106 meth = TyCon . unqual . Text.unpack $ Text.toTitle (_mHttpMethod m)
108− octet = TyCon "'[OctetStream]"
108+ octet = tylist ["OctetStream"]
109− json = TyCon "'[JSON]"
109+ json = tylist ["JSON"]
111 alt = TyApp (TyApp (TyCon "QueryParam") (sing "alt")) (TyCon "Media")
111 alt = TyApp (TyApp (TyCon "QueryParam") (sing "alt")) (TyCon "Media")
@@ -141,7 +141,7 @@ requestDecl n p api url fs m =
141 rs = InsType noLoc (TyApp (TyCon "Rs") (tycon n)) $
141 rs = InsType noLoc (TyApp (TyCon "Rs") (tycon n)) $
142 maybe unit_tycon (tycon . ref) (_mResponse m)
142 maybe unit_tycon (tycon . ref) (_mResponse m)
144− alt = var . name . Text.unpack . Text.toUpper <$>
144+ alt = var . name . Text.unpack . alternate <$>
145 (Map.lookup "alt" (_mParameters m) >>= view iDefault)
145 (Map.lookup "alt" (_mParameters m) >>= view iDefault)
147googleRequestDecl :: Global
147googleRequestDecl :: Global
@@ -181,7 +181,9 @@ googleRequestDecl g n assoc alt p api url fs m =
181 pat | _mSupportsMediaDownload m = PInfixApp (pvar "go") (UnQual (sym ":<|>")) PWildCard
181 pat | _mSupportsMediaDownload m = PInfixApp (pvar "go") (UnQual (sym ":<|>")) PWildCard
182 | otherwise = pvar "go"
182 | otherwise = pvar "go"
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)
186 go l | Just p <- Map.lookup l ps
188 go l | Just p <- Map.lookup l ps
187 , _pLocation p == Query
189 , _pLocation p == Query
@@ -191,6 +193,9 @@ googleRequestDecl g n assoc alt p api url fs m =
191 ps = _mParameters m
193 ps = _mParameters m
192 v = var . fname p
194 v = var . fname p
196+ (fs', rq) | Just r <- _mRequest m = let x = localise (ref r) in (delete x fs, Just x)
197+ | otherwise = (fs, Nothing)
194 pats = [pvar "r", pvar "u", prec]
199 pats = [pvar "r", pvar "u", prec]
195 prec = PRec (UnQual (dname g)) [PFieldWildcard]
200 prec = PRec (UnQual (dname g)) [PFieldWildcard]
@@ -201,7 +206,7 @@ authDecl g p fs = InstDecl noLoc Nothing [] [] (unqual "GoogleAuth") [tycon g]
203 method l f
208 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"))
205 | otherwise = funD l (app (var "const") (var "pure"))
210 | otherwise = funD l (app (var "const") (var "pure"))
207jsonDecls :: Global -> Prefix -> Map Local Solved -> [Decl]
212jsonDecls :: Global -> Prefix -> Map Local Solved -> [Decl]
@@ -444,6 +449,10 @@ strict = TyBang BangedTy . \case
444sing :: Text -> Type
449sing :: Text -> Type
445sing = TyCon . unqual . Text.unpack . flip mappend "\"" . mappend "\""
450sing = TyCon . unqual . Text.unpack . flip mappend "\"" . mappend "\""
452+tylist :: [Text] -> Type
453+tylist xs = TyCon . UnQual . name . Text.unpack $
454+ "'[" <> Text.intercalate ", " xs <> "]"
447tycon :: Global -> Type
456tycon :: Global -> Type
448tycon = TyCon . UnQual . dname
457tycon = TyCon . UnQual . dname