Skip to content

Commit b8d0e97

Browse files
committed
Add support for multi-part forms
1 parent 2851468 commit b8d0e97

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

package.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ dependencies:
2828
- http-types >= 0.12.0
2929
- protolude >= 0.2.3
3030
- servant >= 0.16.0
31+
- servant-multipart >= 0.11.0
3132
- text >= 1.2.0
3233

3334
ghc-options:

src/Servant/To/Elm.hs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import qualified Data.Text as Text
2525
import qualified Network.HTTP.Types as HTTP
2626
import Servant.API ((:<|>), (:>))
2727
import qualified Servant.API as Servant
28+
import qualified Servant.Multipart as Servant
2829
import qualified Servant.API.Modifiers as Servant
2930

3031
import Language.Elm.Definition (Definition)
@@ -564,6 +565,13 @@ instance (HasElmEncoder Aeson.Value a, HasElmEndpoints api, list ~ '[Servant.JSO
564565
{ _body = Just ("Http.jsonBody", makeEncoder @Aeson.Value @a)
565566
}
566567

568+
instance (HasElmEncoder (Servant.MultipartData tag) a, HasElmEndpoints api)
569+
=> HasElmEndpoints (Servant.MultipartForm tag a :> api) where
570+
elmEndpoints' prefix =
571+
elmEndpoints' @api prefix
572+
{ _body = Just ("Http.multipartBody", makeEncoder @(Servant.MultipartData tag) @a)
573+
}
574+
567575
instance (KnownSymbol path, HasElmEndpoints api) => HasElmEndpoints (path :> api) where
568576
elmEndpoints' prefix =
569577
elmEndpoints' @api prefix
@@ -607,3 +615,11 @@ instance HasElmType Servant.NoContent where
607615
instance HasElmDecoder Aeson.Value Servant.NoContent where
608616
elmDecoder =
609617
Expression.App "Json.Decode.succeed" "NoContent.NoContent"
618+
619+
instance HasElmType (Servant.MultipartData tag) where
620+
elmType =
621+
Type.App "List.List" "Http.Part"
622+
623+
instance HasElmEncoder (Servant.MultipartData tag) (Servant.MultipartData tag) where
624+
elmEncoder =
625+
"Basics.identity"

0 commit comments

Comments
 (0)