{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
module Servant.CLI
(
parseClient,
parseHandleClient,
parseClientWithContext,
parseHandleClientWithContext,
HasCLI (CLIResult, CLIHandler, cliHandler),
ContextFor (..),
NamedContext (..),
descendIntoNamedContext,
cliPStruct,
cliPStructWithContext,
structParser,
cliHandlePStruct,
cliHandlePStructWithContext,
ParseBody (..),
defaultParseBody,
ToCapture (..),
DocCapture (..),
ToParam (..),
DocQueryParam (..),
ParamKind (..),
ToAuthInfo (..),
DocAuthentication (..),
)
where
import Data.Proxy
import Data.Vinyl
import Options.Applicative
import Servant.CLI.HasCLI
import Servant.CLI.Internal.PStruct
import Servant.CLI.ParseBody
import Servant.Client.Core
import Servant.Docs.Internal
cliPStructWithContext ::
(HasCLI m api context) =>
Proxy m ->
Proxy api ->
Rec (ContextFor m) context ->
PStruct (m (CLIResult m api))
cliPStructWithContext :: forall (m :: * -> *) api (context :: [*]).
HasCLI m api context =>
Proxy m
-> Proxy api
-> Rec (ContextFor m) context
-> PStruct (m (CLIResult m api))
cliPStructWithContext Proxy m
pm Proxy api
pa =
((Request -> m (CLIResult m api)) -> m (CLIResult m api))
-> PStruct (Request -> m (CLIResult m api))
-> PStruct (m (CLIResult m api))
forall a b. (a -> b) -> PStruct a -> PStruct b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Request -> m (CLIResult m api)) -> Request -> m (CLIResult m api)
forall a b. (a -> b) -> a -> b
$ Request
defaultRequest)
(PStruct (Request -> m (CLIResult m api))
-> PStruct (m (CLIResult m api)))
-> (Rec (ContextFor m) context
-> PStruct (Request -> m (CLIResult m api)))
-> Rec (ContextFor m) context
-> PStruct (m (CLIResult m api))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Proxy m
-> Proxy api
-> Rec (ContextFor m) context
-> PStruct (Request -> m (CLIResult m api))
forall (m :: * -> *) api (ctx :: [*]).
HasCLI m api ctx =>
Proxy m
-> Proxy api
-> Rec (ContextFor m) ctx
-> PStruct (Request -> m (CLIResult m api))
cliPStructWithContext_ Proxy m
pm Proxy api
pa
cliHandlePStructWithContext ::
forall m api context r.
(HasCLI m api context, Functor m) =>
Proxy m ->
Proxy api ->
Rec (ContextFor m) context ->
CLIHandler m api r ->
PStruct (m r)
cliHandlePStructWithContext :: forall (m :: * -> *) api (context :: [*]) r.
(HasCLI m api context, Functor m) =>
Proxy m
-> Proxy api
-> Rec (ContextFor m) context
-> CLIHandler m api r
-> PStruct (m r)
cliHandlePStructWithContext Proxy m
pm Proxy api
pa Rec (ContextFor m) context
p CLIHandler m api r
h =
(CLIResult m api -> r) -> m (CLIResult m api) -> m r
forall a b. (a -> b) -> m a -> m b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Proxy m
-> Proxy api
-> Proxy context
-> CLIHandler m api r
-> CLIResult m api
-> r
forall r.
Proxy m
-> Proxy api
-> Proxy context
-> CLIHandler m api r
-> CLIResult m api
-> r
forall (m :: * -> *) api (ctx :: [*]) r.
HasCLI m api ctx =>
Proxy m
-> Proxy api
-> Proxy ctx
-> CLIHandler m api r
-> CLIResult m api
-> r
cliHandler Proxy m
pm Proxy api
pa (forall (t :: [*]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @context) CLIHandler m api r
h)
(m (CLIResult m api) -> m r)
-> PStruct (m (CLIResult m api)) -> PStruct (m r)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Proxy m
-> Proxy api
-> Rec (ContextFor m) context
-> PStruct (m (CLIResult m api))
forall (m :: * -> *) api (context :: [*]).
HasCLI m api context =>
Proxy m
-> Proxy api
-> Rec (ContextFor m) context
-> PStruct (m (CLIResult m api))
cliPStructWithContext Proxy m
pm Proxy api
pa Rec (ContextFor m) context
p
parseClientWithContext ::
(HasCLI m api context) =>
Proxy api ->
Proxy m ->
Rec (ContextFor m) context ->
InfoMod (m (CLIResult m api)) ->
IO (m (CLIResult m api))
parseClientWithContext :: forall (m :: * -> *) api (context :: [*]).
HasCLI m api context =>
Proxy api
-> Proxy m
-> Rec (ContextFor m) context
-> InfoMod (m (CLIResult m api))
-> IO (m (CLIResult m api))
parseClientWithContext Proxy api
pa Proxy m
pm Rec (ContextFor m) context
p InfoMod (m (CLIResult m api))
im =
ParserInfo (m (CLIResult m api)) -> IO (m (CLIResult m api))
forall a. ParserInfo a -> IO a
execParser (ParserInfo (m (CLIResult m api)) -> IO (m (CLIResult m api)))
-> (PStruct (m (CLIResult m api))
-> ParserInfo (m (CLIResult m api)))
-> PStruct (m (CLIResult m api))
-> IO (m (CLIResult m api))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PStruct (m (CLIResult m api))
-> InfoMod (m (CLIResult m api))
-> ParserInfo (m (CLIResult m api)))
-> InfoMod (m (CLIResult m api))
-> PStruct (m (CLIResult m api))
-> ParserInfo (m (CLIResult m api))
forall a b c. (a -> b -> c) -> b -> a -> c
flip PStruct (m (CLIResult m api))
-> InfoMod (m (CLIResult m api))
-> ParserInfo (m (CLIResult m api))
forall a. PStruct a -> InfoMod a -> ParserInfo a
structParser InfoMod (m (CLIResult m api))
im (PStruct (m (CLIResult m api)) -> IO (m (CLIResult m api)))
-> PStruct (m (CLIResult m api)) -> IO (m (CLIResult m api))
forall a b. (a -> b) -> a -> b
$
Proxy m
-> Proxy api
-> Rec (ContextFor m) context
-> PStruct (m (CLIResult m api))
forall (m :: * -> *) api (context :: [*]).
HasCLI m api context =>
Proxy m
-> Proxy api
-> Rec (ContextFor m) context
-> PStruct (m (CLIResult m api))
cliPStructWithContext Proxy m
pm Proxy api
pa Rec (ContextFor m) context
p
parseHandleClientWithContext ::
forall m api context r.
(HasCLI m api context, Functor m) =>
Proxy api ->
Proxy m ->
Rec (ContextFor m) context ->
InfoMod (m (CLIResult m api)) ->
CLIHandler m api r ->
IO (m r)
parseHandleClientWithContext :: forall (m :: * -> *) api (context :: [*]) r.
(HasCLI m api context, Functor m) =>
Proxy api
-> Proxy m
-> Rec (ContextFor m) context
-> InfoMod (m (CLIResult m api))
-> CLIHandler m api r
-> IO (m r)
parseHandleClientWithContext Proxy api
pa Proxy m
pm Rec (ContextFor m) context
p InfoMod (m (CLIResult m api))
im CLIHandler m api r
h =
(CLIResult m api -> r) -> m (CLIResult m api) -> m r
forall a b. (a -> b) -> m a -> m b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Proxy m
-> Proxy api
-> Proxy context
-> CLIHandler m api r
-> CLIResult m api
-> r
forall r.
Proxy m
-> Proxy api
-> Proxy context
-> CLIHandler m api r
-> CLIResult m api
-> r
forall (m :: * -> *) api (ctx :: [*]) r.
HasCLI m api ctx =>
Proxy m
-> Proxy api
-> Proxy ctx
-> CLIHandler m api r
-> CLIResult m api
-> r
cliHandler Proxy m
pm Proxy api
pa (forall (t :: [*]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @context) CLIHandler m api r
h)
(m (CLIResult m api) -> m r)
-> IO (m (CLIResult m api)) -> IO (m r)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Proxy api
-> Proxy m
-> Rec (ContextFor m) context
-> InfoMod (m (CLIResult m api))
-> IO (m (CLIResult m api))
forall (m :: * -> *) api (context :: [*]).
HasCLI m api context =>
Proxy api
-> Proxy m
-> Rec (ContextFor m) context
-> InfoMod (m (CLIResult m api))
-> IO (m (CLIResult m api))
parseClientWithContext Proxy api
pa Proxy m
pm Rec (ContextFor m) context
p InfoMod (m (CLIResult m api))
im
cliPStruct ::
(HasCLI m api '[]) =>
Proxy m ->
Proxy api ->
PStruct (m (CLIResult m api))
cliPStruct :: forall (m :: * -> *) api.
HasCLI m api '[] =>
Proxy m -> Proxy api -> PStruct (m (CLIResult m api))
cliPStruct Proxy m
pm Proxy api
pa = Proxy m
-> Proxy api
-> Rec (ContextFor m) '[]
-> PStruct (m (CLIResult m api))
forall (m :: * -> *) api (context :: [*]).
HasCLI m api context =>
Proxy m
-> Proxy api
-> Rec (ContextFor m) context
-> PStruct (m (CLIResult m api))
cliPStructWithContext Proxy m
pm Proxy api
pa Rec (ContextFor m) '[]
forall {u} (a :: u -> *). Rec a '[]
RNil
cliHandlePStruct ::
(HasCLI m api '[], Functor m) =>
Proxy m ->
Proxy api ->
CLIHandler m api r ->
PStruct (m r)
cliHandlePStruct :: forall (m :: * -> *) api r.
(HasCLI m api '[], Functor m) =>
Proxy m -> Proxy api -> CLIHandler m api r -> PStruct (m r)
cliHandlePStruct Proxy m
pm Proxy api
pa = Proxy m
-> Proxy api
-> Rec (ContextFor m) '[]
-> CLIHandler m api r
-> PStruct (m r)
forall (m :: * -> *) api (context :: [*]) r.
(HasCLI m api context, Functor m) =>
Proxy m
-> Proxy api
-> Rec (ContextFor m) context
-> CLIHandler m api r
-> PStruct (m r)
cliHandlePStructWithContext Proxy m
pm Proxy api
pa Rec (ContextFor m) '[]
forall {u} (a :: u -> *). Rec a '[]
RNil
parseClient ::
(HasCLI m api '[]) =>
Proxy api ->
Proxy m ->
InfoMod (m (CLIResult m api)) ->
IO (m (CLIResult m api))
parseClient :: forall (m :: * -> *) api.
HasCLI m api '[] =>
Proxy api
-> Proxy m
-> InfoMod (m (CLIResult m api))
-> IO (m (CLIResult m api))
parseClient Proxy api
pa Proxy m
pm = Proxy api
-> Proxy m
-> Rec (ContextFor m) '[]
-> InfoMod (m (CLIResult m api))
-> IO (m (CLIResult m api))
forall (m :: * -> *) api (context :: [*]).
HasCLI m api context =>
Proxy api
-> Proxy m
-> Rec (ContextFor m) context
-> InfoMod (m (CLIResult m api))
-> IO (m (CLIResult m api))
parseClientWithContext Proxy api
pa Proxy m
pm Rec (ContextFor m) '[]
forall {u} (a :: u -> *). Rec a '[]
RNil
parseHandleClient ::
(HasCLI m api '[], Functor m) =>
Proxy api ->
Proxy m ->
InfoMod (m (CLIResult m api)) ->
CLIHandler m api r ->
IO (m r)
parseHandleClient :: forall (m :: * -> *) api r.
(HasCLI m api '[], Functor m) =>
Proxy api
-> Proxy m
-> InfoMod (m (CLIResult m api))
-> CLIHandler m api r
-> IO (m r)
parseHandleClient Proxy api
pa Proxy m
pm = Proxy api
-> Proxy m
-> Rec (ContextFor m) '[]
-> InfoMod (m (CLIResult m api))
-> CLIHandler m api r
-> IO (m r)
forall (m :: * -> *) api (context :: [*]) r.
(HasCLI m api context, Functor m) =>
Proxy api
-> Proxy m
-> Rec (ContextFor m) context
-> InfoMod (m (CLIResult m api))
-> CLIHandler m api r
-> IO (m r)
parseHandleClientWithContext Proxy api
pa Proxy m
pm Rec (ContextFor m) '[]
forall {u} (a :: u -> *). Rec a '[]
RNil