git.iko.soy/haskell-servant/servant-elm
on 98097b2 help sign in
27 files changed+112−226
since splitsnapshots
unifiedsplit
.github/workflows/build.yaml−41 .gitignore−1 CHANGELOG.md−20 README.md+8 examples/books/elm/Generated/BooksApi.elm+7 examples/e2e-tests/elm/Generated/Api.elm+7 examples/giphy/elm/Generated/GiphyApi.elm+7 examples/readme-example/my-elm-dir/Generated/MyApi.elm+7 servant-elm.cabal+2−3 src/Servant/Elm/Internal/Generate.hs+18−43 stack.yaml+29−5 test/Common.hs+5−7 test/CompileSpec.hs+1−1 test/GenerateSpec.hs+2−27 test/PolymorphicData.hs−15 test/elm-sources/getBooksByIdSource.elm+2−3 test/elm-sources/getBooksByTitleSource.elm+3−3 test/elm-sources/getBooksSource.elm+2−2 test/elm-sources/getNothingSource.elm+2−2 test/elm-sources/getOneSource.elm+1−1 test/elm-sources/getOneWithDynamicUrlSource.elm+2−2 test/elm-sources/getPolymorphicData.elm−43 test/elm-sources/getWithaheaderSource.elm+1−1 test/elm-sources/getWitharesponseheaderSource.elm+1−1 test/elm-sources/postBooksSource.elm+2−2 test/elm-sources/postTwoSource.elm+1−1 test/elm-sources/putNothingSource.elm+2−2
.github/workflows/build.yamldeleted−41
@@ -1,41 +0,0 @@
1−name: Haskell CI
2−
3−on:
4− push:
5− branches: [ "master" ]
6− pull_request:
7− branches: [ "master" ]
8−
9−permissions:
10− contents: read
11−
12−jobs:
13− build:
14−
15− runs-on: ubuntu-latest
16−
17− steps:
18− - uses: actions/checkout@v3
19−
20− - name: Install Nix
21− uses: cachix/install-nix-action@v20
22− with:
23− nix_path: nixpkgs=channel:nixos-unstable
24−
25− - name: Cache
26− uses: actions/cache@v3
27− env:
28− cache-name: cache-cabal
29− with:
30− path: ~/.stack
31− key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/*.cabal') }}-${{ hashFiles('**/stack.yaml') }}
32− restore-keys: |
33− ${{ runner.os }}-build-${{ env.cache-name }}-
34− ${{ runner.os }}-build-
35− ${{ runner.os }}-
36−
37− - name: Build
38− run: stack build --test --no-run-tests
39−
40− - name: Run tests
41− run: stack test
.gitignore−1
@@ -3,4 +3,3 @@ elm-stuff
33/_test-cache/
44TAGS
55.dir-locals.el
6−stack.yaml.lock
CHANGELOG.md−20
@@ -1,23 +1,3 @@
1−0.7.2
2−-----
3−
4−* Commit a80f8b41d37d11778d2c27e6b38e881a71e85343. Fix for elm-bridge-0.6.0
5−
6−0.7.1
7−-----
8−
9−* PR #61. Improving support for polymorphic data types
10−
11−0.7.0
12−-----
13−
14−* PR #59. Using the appropriate toString functions for different types
15−
16−0.6.1
17−-----
18−
19−* PR #57. mkUrl: Use urlBase for Dynamic case
20−
2110.6.0.2
222-------
233
README.md+8
@@ -61,6 +61,7 @@ Let's save this as `example.hs` and run it:
6161```
6262$ stack runghc example.hs
6363Writing: my-elm-dir/Generated/MyApi.elm
64+$
6465```
6566
6667Here's what was generated:
@@ -78,6 +79,13 @@ import Http
7879import String
7980import Url.Builder
8081
82+maybeBoolToIntStr : Maybe Bool -> String
83+maybeBoolToIntStr mx =
84+ case mx of
85+ Nothing -> ""
86+ Just True -> "1"
87+ Just False -> "0"
88+
8189type alias Book =
8290 { name: String
8391 }
examples/books/elm/Generated/BooksApi.elm+7
@@ -10,6 +10,13 @@ import Http
1010import String
1111import Url.Builder
1212
13+maybeBoolToIntStr : Maybe Bool -> String
14+maybeBoolToIntStr mx =
15+ case mx of
16+ Nothing -> ""
17+ Just True -> "1"
18+ Just False -> "0"
19+
1320type alias Book =
1421 { name: String
1522 }
examples/e2e-tests/elm/Generated/Api.elm+7
@@ -10,6 +10,13 @@ import Http
1010import String
1111import Url.Builder
1212
13+maybeBoolToIntStr : Maybe Bool -> String
14+maybeBoolToIntStr mx =
15+ case mx of
16+ Nothing -> ""
17+ Just True -> "1"
18+ Just False -> "0"
19+
1320type alias MessageBody =
1421 { message: String
1522 }
examples/giphy/elm/Generated/GiphyApi.elm+7
@@ -10,6 +10,13 @@ import Http
1010import String
1111import Url.Builder
1212
13+maybeBoolToIntStr : Maybe Bool -> String
14+maybeBoolToIntStr mx =
15+ case mx of
16+ Nothing -> ""
17+ Just True -> "1"
18+ Just False -> "0"
19+
1320type alias Gif =
1421 { data: GifData
1522 }
examples/readme-example/my-elm-dir/Generated/MyApi.elm+7
@@ -10,6 +10,13 @@ import Http
1010import String
1111import Url.Builder
1212
13+maybeBoolToIntStr : Maybe Bool -> String
14+maybeBoolToIntStr mx =
15+ case mx of
16+ Nothing -> ""
17+ Just True -> "1"
18+ Just False -> "0"
19+
1320type alias Book =
1421 { name: String
1522 }
servant-elm.cabal+2−3
@@ -1,5 +1,5 @@
11name: servant-elm
2−version: 0.7.3
2+version: 0.6.0.2
33synopsis: Automatically derive Elm functions to query servant webservices.
44description: Please see README.md
55homepage: http://github.com/mattjbray/servant-elm#readme
@@ -34,7 +34,7 @@ library
3434 build-depends: base >= 4.7 && < 5
3535 , aeson >= 0.9
3636 , directory
37− , elm-bridge >= 0.5.2
37+ , elm-bridge >= 0.4
3838 , lens
3939 , servant >= 0.8
4040 , servant-foreign >= 0.8
@@ -48,7 +48,6 @@ test-suite servant-elm-test
4848 hs-source-dirs: test
4949 main-is: GenerateSpec.hs
5050 other-modules: Common
51− , PolymorphicData
5251 build-depends:
5352 Diff
5453 , HUnit
src/Servant/Elm/Internal/Generate.hs+18−43
@@ -1,4 +1,3 @@
1−{-# LANGUAGE CPP #-}
21{-# LANGUAGE RecordWildCards #-}
32{-# LANGUAGE FlexibleContexts #-}
43{-# LANGUAGE MultiParamTypeClasses #-}
@@ -20,11 +19,8 @@ import Elm.Json (jsonParserForType, jsonSerForType)
2019import qualified Elm.Module as Elm
2120import Elm.TyRep (ETCon(..), EType(..), ETypeDef(..), toElmType)
2221import Elm.TyRender (renderElm)
23−#if MIN_VERSION_elm_bridge(0,6,0)
24−import Elm.Versions (ElmVersion(Elm0p19))
25−#else
2622import Elm.Versions (ElmVersion(Elm0p18))
27−#endif
23+
2824import Servant.Elm.Internal.Foreign (LangElm, getEndpoints)
2925import qualified Servant.Foreign as F
3026import System.Directory (createDirectoryIfMissing)
@@ -53,22 +49,16 @@ data ElmOptions = ElmOptions
5349 argument.
5450 -}
5551 urlPrefix :: UrlPrefix
56− , elmTypeAlterations :: (EType -> EType)
52+ , elmTypeAlterations :: (EType -> EType)
5753 -- ^ Alterations to perform on ETypes before code generation.
5854 , elmAlterations :: (ETypeDef -> ETypeDef)
5955 -- ^ Alterations to perform on ETypeDefs before code generation.
60− , elmToString :: (EType -> Text)
56+ , elmToString :: (EType -> Text)
6157 -- ^ Elm functions creating a string from a given type.
6258 , emptyResponseElmTypes :: [EType]
6359 -- ^ Types that represent an empty Http response.
6460 , stringElmTypes :: [EType]
6561 -- ^ Types that represent a String.
66− , expectJsonMethod :: Text
67− -- ^ The function to use for JSON responses.
68− , expectStringMethod :: Text
69− -- ^ The function to use for string responses.
70− , httpErrorType :: Text
71− -- ^ The type to use for Http errors.
7262 }
7363
7464
@@ -92,9 +82,6 @@ The default options are:
9282> , stringElmTypes =
9383> [ getType (Proxy :: Proxy String)
9484> , getType (Proxy :: Proxy T.Text) ]
95−> , expectJsonMethod = "Http.expectJson"
96−> , expectStringMethod = "Http.expectString"
97−> , httpErrorType = "Http.Error"
9885> }
9986-}
10087defElmOptions :: ElmOptions
@@ -110,9 +97,6 @@ defElmOptions = ElmOptions
11097 [ toElmType (Proxy :: Proxy String)
11198 , toElmType (Proxy :: Proxy T.Text)
11299 ]
113− , expectJsonMethod = "Http.expectJson"
114− , expectStringMethod = "Http.expectString"
115− , httpErrorType = "Http.Error"
116100 }
117101
118102
@@ -131,7 +115,6 @@ The default required imports are:
131115> import Set
132116> import Http
133117> import String
134−> import Url
135118> import Url.Builder
136119-}
137120defElmImports :: Text
@@ -145,7 +128,6 @@ defElmImports =
145128 , "import Set"
146129 , "import Http"
147130 , "import String"
148− , "import Url"
149131 , "import Url.Builder"
150132 ]
151133
@@ -167,12 +149,7 @@ generateElmModuleWith ::
167149generateElmModuleWith options namespace imports rootDir typeDefs api = do
168150 let out =
169151 T.unlines $
170− [
171−#if MIN_VERSION_elm_bridge(0,6,0)
172− T.pack $ Elm.moduleHeader Elm0p19 moduleName
173−#else
174− T.pack $ Elm.moduleHeader Elm0p18 moduleName
175−#endif
152+ [ T.pack $ Elm.moduleHeader Elm0p18 moduleName
176153 , ""
177154 , imports
178155 , T.pack $ Elm.makeModuleContentWithAlterations (elmAlterations options) typeDefs
@@ -259,7 +236,7 @@ generateElmForRequest opts request =
259236 fnName =
260237 request ^. F.reqFuncName . to (replace . F.camelCase) . to stext
261238
262− replace = T.replace "-" "" . T.replace "." "" . T.replace " " ""
239+ replace = T.replace "-" "" . T.replace "." ""
263240
264241 typeSignature =
265242 mkTypeSignature opts request
@@ -321,7 +298,7 @@ mkTypeSignature opts request =
321298 toMsgType :: Maybe Doc
322299 toMsgType = do
323300 result <- fmap elmTypeRef $ request ^. F.reqReturnType
324− Just ("(Result" <+> stext (httpErrorType opts) <+> parens result <+> "-> msg)")
301+ Just ("(Result Http.Error " <+> parens result <+> " -> msg)")
325302
326303 returnType :: Maybe Doc
327304 returnType = do
@@ -339,7 +316,7 @@ elmCaptureArg segment =
339316 "capture_" <>
340317 F.captureArg segment ^. F.argName . to (stext . replace . F.unPathSegment)
341318 where
342− replace = T.replace "-" "_" . T.replace " " "_"
319+ replace = T.replace "-" "_"
343320
344321
345322elmQueryArg :: F.QueryArg EType -> Doc
@@ -443,7 +420,7 @@ mkLetParams opts request =
443420 , "Just"
444421 ]
445422 )
446−
423+
447424 where
448425 elmName = elmQueryArg qarg
449426 name = qarg ^. F.queryArgName . F.argName . to (stext . F.unPathSegment)
@@ -510,14 +487,14 @@ mkRequest opts request =
510487 expect =
511488 case request ^. F.reqReturnType of
512489 Just elmTypeExpr
513− | isEmptyType opts $ (elmTypeAlterations opts) elmTypeExpr
490+ | isEmptyType opts elmTypeExpr
514491 -- let elmConstructor = T.pack (renderElm elmTypeExpr)
515492 ->
516− stext (expectStringMethod opts) <> line <+> indent i "(\\x -> case x of" <> line <+>
493+ "Http.expectString " <> line <+> indent i "(\\x -> case x of" <> line <+>
517494 indent i "Err e -> toMsg (Err e)" <> line <+>
518495 indent i "Ok _ -> toMsg (Ok ()))"
519496 Just elmTypeExpr ->
520− stext (expectJsonMethod opts) <+> "toMsg" <+> renderDecoderName ((elmTypeAlterations opts) elmTypeExpr)
497+ "Http.expectJson toMsg" <+> renderDecoderName elmTypeExpr
521498 Nothing -> error "mkHttpRequest: no reqReturnType?"
522499 -- case request ^. F.reqReturnType of
523500 -- Just elmTypeExpr | isEmptyType opts elmTypeExpr ->
@@ -545,8 +522,6 @@ renderDecoderName elmTypeExpr =
545522 parens ("Json.Decode.list " <> parens (renderDecoderName t))
546523 ETyApp (ETyCon (ETCon "Maybe")) t ->
547524 parens ("Json.Decode.maybe " <> parens (renderDecoderName t))
548− ETyApp x y ->
549− parens (renderDecoderName x <+> renderDecoderName y)
550525 ETyCon (ETCon "Int") -> "Json.Decode.int"
551526 ETyCon (ETCon "String") -> "Json.Decode.string"
552527 _ -> ("jsonDec" <> stext (T.pack (renderElm elmTypeExpr)))
@@ -564,7 +539,7 @@ mkUrl opts segments =
564539 where
565540 urlBuilder :: Doc
566541 urlBuilder = case urlPrefix opts of
567− Dynamic -> "Url.Builder.crossOrigin urlBase" :: Doc
542+ Dynamic -> "Url.Builder.absolute" :: Doc
568543 Static url -> "Url.Builder.crossOrigin" <+> dquotes (stext url)
569544
570545 segmentToDoc :: F.Segment EType -> Doc
@@ -574,10 +549,10 @@ mkUrl opts segments =
574549 dquotes (stext (F.unPathSegment path))
575550 F.Cap arg ->
576551 let
577− toStringSrc =
578− toString opts (elmTypeAlterations opts (maybeOf (arg ^. F.argType)))
552+ toStringSrc =
553+ toString opts (maybeOf (arg ^. F.argType))
579554 in
580− "Url.percentEncode " <> pipeRight [elmCaptureArg s, toStringSrc]
555+ pipeRight [elmCaptureArg s, toStringSrc]
581556
582557
583558mkQueryParams
@@ -595,7 +570,7 @@ response body.
595570-}
596571isEmptyType :: ElmOptions -> EType -> Bool
597572isEmptyType opts elmTypeExpr =
598− (elmTypeAlterations opts elmTypeExpr) `elem` emptyResponseElmTypes opts
573+ elmTypeExpr `elem` emptyResponseElmTypes opts
599574
600575
601576{- | Determines whether we call `toString` on URL captures and query params of
@@ -603,7 +578,7 @@ this type in Elm.
603578-}
604579isElmStringType :: ElmOptions -> EType -> Bool
605580isElmStringType opts elmTypeExpr =
606− (elmTypeAlterations opts elmTypeExpr) `elem` stringElmTypes opts
581+ elmTypeExpr `elem` stringElmTypes opts
607582
608583{- | Determines whether a type is 'Maybe a' where 'a' is something akin to a 'String'.
609584-}
@@ -645,7 +620,7 @@ elmListOfMaybes ds = "List.filterMap identity" <$> indent 4 (elmList ds)
645620defaultElmToString :: EType -> Text
646621defaultElmToString argType =
647622 case argType of
648− ETyCon (ETCon "Bool") -> "(\\value -> if value then \"true\" else \"false\")"
623+ ETyCon (ETCon "Bool") -> "(\\value -> if value then \"1\" else \"0\")"
649624 ETyCon (ETCon "Float") -> "String.fromFloat"
650625 ETyCon (ETCon "Char") -> "String.fromChar"
651626 ETyApp (ETyCon (ETCon "Maybe")) v -> "(Maybe.map " <> defaultElmToString v <> " >> Maybe.withDefault \"\")"
stack.yaml+29−5
@@ -1,9 +1,33 @@
1−resolver: lts-20.11
1+# For more information, see: https://github.com/commercialhaskell/stack/blob/release/doc/yaml_configuration.md
2+
3+# Specifies the GHC version and set of packages available (e.g., lts-3.5, nightly-2015-09-21, ghc-7.10.2)
4+resolver: lts-13.15
5+
6+# Local packages, usually specified by relative directory name
27packages:
38- '.'
9+
10+# Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3)
11+extra-deps:
12+- elm-bridge-0.5.1@sha256:e38bfb9dcd1e2cd119a280072f2f99ed718120c21f37f102b8318156645f06da
13+
14+# Override default flag values for local packages and extra-deps
415flags: {}
16+
17+# Extra package databases containing global packages
518extra-package-dbs: []
6−nix:
7− enable: true
8− packages:
9− - zlib
19+
20+# Control whether we use the GHC we find on the path
21+# system-ghc: true
22+
23+# Require a specific version of stack, using version ranges
24+# require-stack-version: -any # Default
25+# require-stack-version: >= 0.1.4.0
26+
27+# Override the architecture used by stack, especially useful on Windows
28+# arch: i386
29+# arch: x86_64
30+
31+# Extra directories used by stack for building
32+# extra-include-dirs: [/path/to/dir]
33+# extra-lib-dirs: [/path/to/dir]
test/Common.hs+5−7
@@ -5,9 +5,9 @@ module Common where
55
66import Data.Proxy (Proxy (Proxy))
77import Data.Text (Text)
8−import Servant.API ((:<|>), (:>), Capture, Get, Header,
8+import Servant.API ((:<|>), (:>), Capture, Get, GetNoContent, Header,
99 Header', Headers, JSON, Post,
10− Put, QueryFlag, QueryParam,
10+ PostNoContent, Put, QueryFlag, QueryParam,
1111 QueryParam', QueryParams, ReqBody, Required)
1212import Servant.Elm (deriveBoth, defaultOptions)
1313
@@ -27,7 +27,7 @@ type TestApi =
2727 :> Capture "id" Int
2828 :> Get '[JSON] Book
2929 :<|> "books"
30− :> Capture "title space" Text
30+ :> Capture "title" Text
3131 :> Get '[JSON] Book
3232 :<|> "books"
3333 :> QueryFlag "published"
@@ -38,11 +38,9 @@ type TestApi =
3838 :> Get '[JSON] [Book]
3939 :<|> "books"
4040 :> ReqBody '[JSON] Book
41− -- :> PostNoContent '[JSON] ()
42− :> Post '[JSON] ()
41+ :> PostNoContent '[JSON] ()
4342 :<|> "nothing"
44− :> Get '[JSON] ()
45− -- :> GetNoContent '[JSON] ()
43+ :> GetNoContent '[JSON] ()
4644 :<|> "nothing"
4745 :> Put '[JSON] () -- old way to specify no content
4846 :<|> "with-a-header"
test/CompileSpec.hs+1−1
@@ -45,7 +45,7 @@ spec = do
4545 api = (Proxy :: Proxy TestApi)
4646 let out =
4747 T.unlines $
48− [ T.pack $ Elm.moduleHeader Elm0p19 moduleName
48+ [ T.pack $ Elm.moduleHeader Elm0p18 moduleName
4949 , ""
5050 , imports
5151 , ""
test/GenerateSpec.hs+2−27
@@ -18,14 +18,13 @@ import Test.Hspec (Spec, describe, hspec, it)
1818import Test.HUnit (Assertion, assertEqual)
1919
2020import Common (testApi)
21−import PolymorphicData (SomeRecord(..), PolymorphicData(..))
2221
2322
2423main :: IO ()
2524main = hspec spec
2625
2726spec :: Test.Hspec.Spec
28−spec =
27+spec = do
2928 describe "encoding a simple api" $
3029 do it "does it" $
3130 do expected <-
@@ -123,30 +122,6 @@ spec =
123122 })
124123 (Proxy :: Proxy ("one" :> Get '[JSON] Int)))
125124 generated `itemsShouldBe` expected
126− it "works with polymorphic data" $
127− do expected <-
128− mapM
129− (\(fpath, header) -> do
130− source <- T.readFile fpath
131− return (fpath, header, source))
132− [ ( "test/elm-sources/getPolymorphicData.elm"
133− , "module GetPolymorphicData exposing (..)\n\n" <>
134− "import Http\n" <>
135− "import Json.Decode exposing (..)\n" <>
136− "import Url.Builder\n\n" <>
137− "type PolymorphicData a b = PolymorphicData a b\n" <>
138− "type SomeRecord = SomeRecord { recordId : Int, recordname : String }\n\n" <>
139− "jsonDecPolymorphicData : Json.Decode.Decoder a -> Json.Decode.Decoder b -> Json.Decode.Decoder (PolymorphicData a b)\n"<>
140− "jsonDecPolymorphicData _ _ = Debug.todo \"finish\"\n\n" <>
141− "jsonDecSomeRecord : Json.Decode.Decoder SomeRecord\n"<>
142− "jsonDecSomeRecord = Debug.todo \"finish\"\n\n\n")]
143− let generated =
144− map
145− (<> "\n")
146− (generateElmForAPIWith
147− defElmOptions
148− (Proxy :: Proxy ( "polymorphicData" :> Get '[JSON] (PolymorphicData [String] SomeRecord))))
149− generated `itemsShouldBe` expected
150125
151126itemsShouldBe :: [Text] -> [(String, Text, Text)] -> IO ()
152127itemsShouldBe actual expected =
@@ -163,7 +138,7 @@ shouldBeDiff a (fpath,header,b) =
163138 (Diff.getGroupedDiff
164139 (lines (T.unpack actual))
165140 (lines (T.unpack expected))))
166− expected actual
141+ actual expected
167142 where
168143 actual = T.strip $ header <> a
169144 expected = T.strip b
test/PolymorphicData.hsdeleted−15
@@ -1,15 +0,0 @@
1−{-# LANGUAGE TemplateHaskell #-}
2−
3−module PolymorphicData where
4−
5−import Servant.Elm
6−
7−
8−data PolymorphicData a b = PolymorphicData a b deriving (Show, Eq)
9−data SomeRecord = SomeRecord
10− { recordId :: Int
11− , recordName :: String
12− } deriving (Show, Eq)
13−
14−deriveBoth defaultOptions ''PolymorphicData
15−deriveBoth defaultOptions ''SomeRecord
test/elm-sources/getBooksByIdSource.elm+2−3
@@ -8,7 +8,7 @@ type Book = Book
88jsonDecBook : Json.Decode.Decoder Book
99jsonDecBook = Debug.todo ""
1010
11−getBooksById : Int -> (Result Http.Error (Book) -> msg) -> Cmd msg
11+getBooksById : Int -> (Result Http.Error (Book) -> msg) -> Cmd msg
1212getBooksById capture_id toMsg =
1313 let
1414 params =
@@ -24,8 +24,7 @@ getBooksById capture_id toMsg =
2424 , url =
2525 Url.Builder.crossOrigin ""
2626 [ "books"
27− , Url.percentEncode (capture_id
28− |> String.fromInt)
27+ , (capture_id |> String.fromInt)
2928 ]
3029 params
3130 , body =
test/elm-sources/getBooksByTitleSource.elm+3−3
@@ -7,8 +7,8 @@ import Json.Decode as J
77type alias Book = {}
88jsonDecBook = J.succeed {}
99
10−getBooksByTitlespace : String -> (Result Http.Error (Book) -> msg) -> Cmd msg
11−getBooksByTitlespace capture_title_space toMsg =
10+getBooksByTitle : String -> (Result Http.Error (Book) -> msg) -> Cmd msg
11+getBooksByTitle capture_title toMsg =
1212 let
1313 params =
1414 List.filterMap identity
@@ -23,7 +23,7 @@ getBooksByTitlespace capture_title_space toMsg =
2323 , url =
2424 Url.Builder.crossOrigin ""
2525 [ "books"
26− , Url.percentEncode (capture_title_space)
26+ , (capture_title)
2727 ]
2828 params
2929 , body =
test/elm-sources/getBooksSource.elm+2−2
@@ -9,7 +9,7 @@ type alias Book = {}
99
1010jsonDecBook = J.succeed {}
1111
12−getBooks : Bool -> (Maybe String) -> (Maybe Int) -> String -> (List (Maybe Bool)) -> (Result Http.Error ((List Book)) -> msg) -> Cmd msg
12+getBooks : Bool -> (Maybe String) -> (Maybe Int) -> String -> (List (Maybe Bool)) -> (Result Http.Error ((List Book)) -> msg) -> Cmd msg
1313getBooks query_published query_sort query_year query_category query_filters toMsg =
1414 let
1515 params =
@@ -27,7 +27,7 @@ getBooks query_published query_sort query_year query_category query_filters toMs
2727 , [ Just query_category
2828 |> Maybe.map (Url.Builder.string "category") ]
2929 , query_filters
30− |> List.map ((Maybe.map (\value -> if value then "true" else "false") >> Maybe.withDefault "")
30+ |> List.map ((Maybe.map (\value -> if value then "1" else "0") >> Maybe.withDefault "")
3131 >> Url.Builder.string "filters[]"
3232 >> Just)
3333 ])
test/elm-sources/getNothingSource.elm+2−2
@@ -4,7 +4,7 @@ import Http
44import Url.Builder
55
66
7−getNothing : (Result Http.Error (()) -> msg) -> Cmd msg
7+getNothing : (Result Http.Error (()) -> msg) -> Cmd msg
88getNothing toMsg =
99 let
1010 params =
@@ -25,7 +25,7 @@ getNothing toMsg =
2525 , body =
2626 Http.emptyBody
2727 , expect =
28− Http.expectString
28+ Http.expectString
2929 (\x -> case x of
3030 Err e -> toMsg (Err e)
3131 Ok _ -> toMsg (Ok ()))
test/elm-sources/getOneSource.elm+1−1
@@ -5,7 +5,7 @@ import Json.Decode exposing (..)
55import Url.Builder
66
77
8−getOne : (Result Http.Error (Int) -> msg) -> Cmd msg
8+getOne : (Result Http.Error (Int) -> msg) -> Cmd msg
99getOne toMsg =
1010 let
1111 params =
test/elm-sources/getOneWithDynamicUrlSource.elm+2−2
@@ -5,7 +5,7 @@ import Url.Builder
55import Json.Decode exposing (..)
66
77
8−getOne : String -> (Result Http.Error (Int) -> msg) -> Cmd msg
8+getOne : String -> (Result Http.Error (Int) -> msg) -> Cmd msg
99getOne urlBase toMsg =
1010 let
1111 params =
@@ -19,7 +19,7 @@ getOne urlBase toMsg =
1919 , headers =
2020 []
2121 , url =
22− Url.Builder.crossOrigin urlBase
22+ Url.Builder.absolute
2323 [ "one"
2424 ]
2525 params
test/elm-sources/getPolymorphicData.elmdeleted−43
@@ -1,43 +0,0 @@
1−module GetPolymorphicData exposing (..)
2−
3−import Http
4−import Json.Decode exposing (..)
5−import Url.Builder
6−
7−type PolymorphicData a b = PolymorphicData a b
8−type SomeRecord = SomeRecord { recordId : Int, recordname : String }
9−
10−jsonDecPolymorphicData : Json.Decode.Decoder a -> Json.Decode.Decoder b -> Json.Decode.Decoder (PolymorphicData a b)
11−jsonDecPolymorphicData _ _ = Debug.todo "finish"
12−
13−jsonDecSomeRecord : Json.Decode.Decoder SomeRecord
14−jsonDecSomeRecord = Debug.todo "finish"
15−
16−
17−getPolymorphicData : (Result Http.Error ((PolymorphicData (List String) SomeRecord)) -> msg) -> Cmd msg
18−getPolymorphicData toMsg =
19− let
20− params =
21− List.filterMap identity
22− (List.concat
23− [])
24− in
25− Http.request
26− { method =
27− "GET"
28− , headers =
29− []
30− , url =
31− Url.Builder.crossOrigin ""
32− [ "polymorphicData"
33− ]
34− params
35− , body =
36− Http.emptyBody
37− , expect =
38− Http.expectJson toMsg ((jsonDecPolymorphicData (Json.Decode.list (Json.Decode.string))) jsonDecSomeRecord)
39− , timeout =
40− Nothing
41− , tracker =
42− Nothing
43− }
test/elm-sources/getWithaheaderSource.elm+1−1
@@ -5,7 +5,7 @@ import Url.Builder
55import Json.Decode exposing (..)
66
77
8−getWithaheader : (Maybe String) -> (Maybe Int) -> String -> Int -> (Result Http.Error (String) -> msg) -> Cmd msg
8+getWithaheader : (Maybe String) -> (Maybe Int) -> String -> Int -> (Result Http.Error (String) -> msg) -> Cmd msg
99getWithaheader header_myStringHeader header_MyIntHeader header_MyRequiredStringHeader header_MyRequiredIntHeader toMsg =
1010 let
1111 params =
test/elm-sources/getWitharesponseheaderSource.elm+1−1
@@ -5,7 +5,7 @@ import Url.Builder
55import Json.Decode exposing (..)
66
77
8−getWitharesponseheader : (Result Http.Error (String) -> msg) -> Cmd msg
8+getWitharesponseheader : (Result Http.Error (String) -> msg) -> Cmd msg
99getWitharesponseheader toMsg =
1010 let
1111 params =
test/elm-sources/postBooksSource.elm+2−2
@@ -7,7 +7,7 @@ import Json.Encode as Enc
77type alias Book = {}
88jsonEncBook = \b -> Enc.object []
99
10−postBooks : Book -> (Result Http.Error (()) -> msg) -> Cmd msg
10+postBooks : Book -> (Result Http.Error (()) -> msg) -> Cmd msg
1111postBooks body toMsg =
1212 let
1313 params =
@@ -28,7 +28,7 @@ postBooks body toMsg =
2828 , body =
2929 Http.jsonBody (jsonEncBook body)
3030 , expect =
31− Http.expectString
31+ Http.expectString
3232 (\x -> case x of
3333 Err e -> toMsg (Err e)
3434 Ok _ -> toMsg (Ok ()))
test/elm-sources/postTwoSource.elm+1−1
@@ -6,7 +6,7 @@ import Json.Encode
66import Url.Builder
77
88
9−postTwo : String -> (Result Http.Error ((Maybe Int)) -> msg) -> Cmd msg
9+postTwo : String -> (Result Http.Error ((Maybe Int)) -> msg) -> Cmd msg
1010postTwo body toMsg =
1111 let
1212 params =
test/elm-sources/putNothingSource.elm+2−2
@@ -4,7 +4,7 @@ import Http
44import Url.Builder
55
66
7−putNothing : (Result Http.Error (()) -> msg) -> Cmd msg
7+putNothing : (Result Http.Error (()) -> msg) -> Cmd msg
88putNothing toMsg =
99 let
1010 params =
@@ -25,7 +25,7 @@ putNothing toMsg =
2525 , body =
2626 Http.emptyBody
2727 , expect =
28− Http.expectString
28+ Http.expectString
2929 (\x -> case x of
3030 Err e -> toMsg (Err e)
3131 Ok _ -> toMsg (Ok ()))