module Servant.API.Routes.Param
( Param
, singleParam
, arrayElemParam
, flagParam
, renderParam
)
where
import qualified Data.Text as T
import Data.Typeable
import GHC.TypeLits
import "this" Servant.API.Routes.Internal.Param
import "this" Servant.API.Routes.Utils
import qualified Servant.Links as S
singleParam :: forall s a. (KnownSymbol s, Typeable a) => Param
singleParam :: forall (s :: Symbol) a. (KnownSymbol s, Typeable a) => Param
singleParam = Param -> Param
Param (String -> Text -> Param
S.SingleParam String
name Text
rep)
where
rep :: Text
rep = forall a. Typeable a => Text
showTypeRep @a
name :: String
name = forall (n :: Symbol) (proxy :: Symbol -> *).
KnownSymbol n =>
proxy n -> String
symbolVal forall a b. (a -> b) -> a -> b
$ forall {k} (t :: k). Proxy t
Proxy @s
arrayElemParam :: forall s a. (KnownSymbol s, Typeable a) => Param
arrayElemParam :: forall (s :: Symbol) a. (KnownSymbol s, Typeable a) => Param
arrayElemParam = Param -> Param
Param (String -> Text -> Param
S.ArrayElemParam String
name Text
rep)
where
rep :: Text
rep = forall a. Typeable a => Text
showTypeRep @a
name :: String
name = forall (n :: Symbol) (proxy :: Symbol -> *).
KnownSymbol n =>
proxy n -> String
symbolVal forall a b. (a -> b) -> a -> b
$ forall {k} (t :: k). Proxy t
Proxy @s
flagParam :: forall s. (KnownSymbol s) => Param
flagParam :: forall (s :: Symbol). KnownSymbol s => Param
flagParam = Param -> Param
Param (String -> Param
S.FlagParam String
name)
where
name :: String
name = forall (n :: Symbol) (proxy :: Symbol -> *).
KnownSymbol n =>
proxy n -> String
symbolVal forall a b. (a -> b) -> a -> b
$ forall {k} (t :: k). Proxy t
Proxy @s
renderParam :: Param -> T.Text
renderParam :: Param -> Text
renderParam (Param Param
param) = case Param
param of
S.SingleParam String
var Text
typ -> String -> Text
T.pack String
var forall a. Semigroup a => a -> a -> a
<> Text
"=<" forall a. Semigroup a => a -> a -> a
<> Text
typ forall a. Semigroup a => a -> a -> a
<> Text
">"
S.ArrayElemParam String
var Text
typ -> String -> Text
T.pack String
var forall a. Semigroup a => a -> a -> a
<> Text
"=<[" forall a. Semigroup a => a -> a -> a
<> Text
typ forall a. Semigroup a => a -> a -> a
<> Text
"]>"
S.FlagParam String
var -> String -> Text
T.pack String
var