Safe Haskell | None |
---|---|
Language | Haskell2010 |
Basic usage:
import MyLib (MyServantApiType) import Servant.Elm spec :: Spec spec = Spec ["Generated", "MyApi"] (defElmImports : generateElmForAPI (Proxy :: Proxy MyServantApiType)) main :: IO () main = specsToDir [spec] "my-elm-dir"
Synopsis
- generateElmForAPI :: (HasForeign LangElm EType api, GenerateList EType (Foreign EType api)) => Proxy api -> [Text]
- generateElmForAPIWith :: (HasForeign LangElm EType api, GenerateList EType (Foreign EType api)) => ElmOptions -> Proxy api -> [Text]
- generateElmModule :: (HasForeign LangElm EType api, GenerateList EType (Foreign EType api)) => Namespace -> Text -> FilePath -> [DefineElm] -> Proxy api -> IO ()
- generateElmModuleWith :: (HasForeign LangElm EType api, GenerateList EType (Foreign EType api)) => ElmOptions -> Namespace -> Text -> FilePath -> [DefineElm] -> Proxy api -> IO ()
- data ElmOptions = ElmOptions {
- urlPrefix :: UrlPrefix
- elmTypeAlterations :: EType -> EType
- elmAlterations :: ETypeDef -> ETypeDef
- elmToString :: EType -> Text
- emptyResponseElmTypes :: [EType]
- stringElmTypes :: [EType]
- data UrlPrefix
- defElmOptions :: ElmOptions
- defElmImports :: Text
- defaultOptions :: Options
- defaultElmToString :: EType -> Text
- data DefineElm where
- DefineElm :: forall a. IsElmDefinition a => Proxy a -> DefineElm
- data EType
- defaultTypeAlterations :: EType -> EType
- toElmType :: Typeable a => Proxy a -> EType
- deriveBoth :: Options -> Name -> Q [Dec]
- deriveElmDef :: Options -> Name -> Q [Dec]
- data Proxy (t :: k) :: forall k. k -> Type = Proxy
Documentation
generateElmForAPI :: (HasForeign LangElm EType api, GenerateList EType (Foreign EType api)) => Proxy api -> [Text] Source #
Generate Elm code for the API with default options.
Returns a list of Elm functions to query your Servant API from Elm.
You could spit these out to a file and call them from your Elm code, but you
would be better off creating a Spec
with the result and using specsToDir
,
which handles the module name for you.
generateElmForAPIWith :: (HasForeign LangElm EType api, GenerateList EType (Foreign EType api)) => ElmOptions -> Proxy api -> [Text] Source #
Generate Elm code for the API with custom options.
generateElmModule :: (HasForeign LangElm EType api, GenerateList EType (Foreign EType api)) => Namespace -> Text -> FilePath -> [DefineElm] -> Proxy api -> IO () Source #
Calls generateElmModuleWith with defElmOptions
.
generateElmModuleWith :: (HasForeign LangElm EType api, GenerateList EType (Foreign EType api)) => ElmOptions -> Namespace -> Text -> FilePath -> [DefineElm] -> Proxy api -> IO () Source #
Helper to generate a complete Elm module given a list of Elm type definitions and an API.
data ElmOptions Source #
Options to configure how code is generated.
ElmOptions | |
|
defElmOptions :: ElmOptions Source #
Default options for generating Elm code.
The default options are:
{ urlPrefix = Static "" , elmAlterations = Elm.defaultTypeAlterations , emptyResponseElmTypes = [ getType (Proxy :: Proxy ()) ] , stringElmTypes = [ getType (Proxy :: Proxy String) , getType (Proxy :: Proxy T.Text) ] }
defElmImports :: Text Source #
Default imports required by generated Elm code.
You probably want to include this at the top of your generated Elm module.
The default required imports are:
import Json.Decode import Json.Encode exposing (Value) -- The following module comes from bartavelle/json-helpers import Json.Helpers exposing (..) import Dict exposing (Dict) import Set import Http import String import Url.Builder
defaultElmToString :: EType -> Text Source #
Convenience re-exports from the Elm module
Existential quantification wrapper for lists of type definitions
DefineElm :: forall a. IsElmDefinition a => Proxy a -> DefineElm |
Type construction : type variables, type constructors, tuples and type application.
defaultTypeAlterations :: EType -> EType #
toElmType :: Typeable a => Proxy a -> EType #
Get an elm-bridge
type representation for a Haskell type.
This can be used to render the type declaration via
ElmRenderable
or the the JSON serializer/parser names via
jsonSerForType
and jsonParserForType
.
deriveBoth :: Options -> Name -> Q [Dec] #
Equivalent to running both deriveJSON
and deriveElmDef
with the
same options, so as to ensure the code on the Haskell and Elm size is
synchronized.
deriveElmDef :: Options -> Name -> Q [Dec] #
Just derive the elm-bridge
definitions for generating the
serialization/deserialization code. It must be kept synchronized with
the Haskell code manually.
Convenience re-exports from Data.Proxy
data Proxy (t :: k) :: forall k. k -> Type #
Proxy
is a type that holds no data, but has a phantom parameter of
arbitrary type (or even kind). Its use is to provide type information, even
though there is no value available of that type (or it may be too costly to
create one).
Historically,
is a safer alternative to the
Proxy
:: Proxy
a'undefined :: a'
idiom.
>>>
Proxy :: Proxy (Void, Int -> Int)
Proxy
Proxy can even hold types of higher kinds,
>>>
Proxy :: Proxy Either
Proxy
>>>
Proxy :: Proxy Functor
Proxy
>>>
Proxy :: Proxy complicatedStructure
Proxy
Instances
Generic1 (Proxy :: k -> Type) | |
Monad (Proxy :: Type -> Type) | Since: base-4.7.0.0 |
Functor (Proxy :: Type -> Type) | Since: base-4.7.0.0 |
Applicative (Proxy :: Type -> Type) | Since: base-4.7.0.0 |
Foldable (Proxy :: Type -> Type) | Since: base-4.7.0.0 |
Defined in Data.Foldable fold :: Monoid m => Proxy m -> m # foldMap :: Monoid m => (a -> m) -> Proxy a -> m # foldr :: (a -> b -> b) -> b -> Proxy a -> b # foldr' :: (a -> b -> b) -> b -> Proxy a -> b # foldl :: (b -> a -> b) -> b -> Proxy a -> b # foldl' :: (b -> a -> b) -> b -> Proxy a -> b # foldr1 :: (a -> a -> a) -> Proxy a -> a # foldl1 :: (a -> a -> a) -> Proxy a -> a # elem :: Eq a => a -> Proxy a -> Bool # maximum :: Ord a => Proxy a -> a # minimum :: Ord a => Proxy a -> a # | |
Traversable (Proxy :: Type -> Type) | Since: base-4.7.0.0 |
Contravariant (Proxy :: Type -> Type) | |
Representable (Proxy :: Type -> Type) | |
Alternative (Proxy :: Type -> Type) | Since: base-4.9.0.0 |
MonadPlus (Proxy :: Type -> Type) | Since: base-4.9.0.0 |
Bounded (Proxy t) | Since: base-4.7.0.0 |
Enum (Proxy s) | Since: base-4.7.0.0 |
Eq (Proxy s) | Since: base-4.7.0.0 |
Ord (Proxy s) | Since: base-4.7.0.0 |
Read (Proxy t) | Since: base-4.7.0.0 |
Show (Proxy s) | Since: base-4.7.0.0 |
Ix (Proxy s) | Since: base-4.7.0.0 |
Generic (Proxy t) | |
Semigroup (Proxy s) | Since: base-4.9.0.0 |
Monoid (Proxy s) | Since: base-4.7.0.0 |
type Rep1 (Proxy :: k -> Type) | Since: base-4.6.0.0 |
type Rep (Proxy :: Type -> Type) | |
type Rep (Proxy t) | Since: base-4.6.0.0 |