{-# LANGUAGE ConstraintKinds #-}
module Prolude.Swagger
(
Swagger.SwaggerType(..)
, SwaggerToSchema
, SwaggerToParamSchema
, defaultDeclareNamedSchema
, nameSchema
) where
import qualified Data.Swagger as Swagger
import qualified Data.Text as Text
import qualified Data.Typeable as Typeable
type SwaggerToParamSchema = Swagger.ToParamSchema
type SwaggerToSchema = Swagger.ToSchema
defaultDeclareNamedSchema
:: (Typeable.Typeable a, Applicative f)
=> (Swagger.Schema -> Swagger.Schema)
-> proxy a
-> f Swagger.NamedSchema
defaultDeclareNamedSchema :: (Schema -> Schema) -> proxy a -> f NamedSchema
defaultDeclareNamedSchema Schema -> Schema
modify proxy a
proxy =
let
schema :: Schema
schema = Schema -> Schema
modify Schema
forall a. Monoid a => a
mempty
namedSchema :: NamedSchema
namedSchema = proxy a -> Schema -> NamedSchema
forall a (proxy :: * -> *).
Typeable a =>
proxy a -> Schema -> NamedSchema
nameSchema proxy a
proxy Schema
schema
in NamedSchema -> f NamedSchema
forall (f :: * -> *) a. Applicative f => a -> f a
pure NamedSchema
namedSchema
nameSchema :: Typeable.Typeable a => proxy a -> Swagger.Schema -> Swagger.NamedSchema
nameSchema :: proxy a -> Schema -> NamedSchema
nameSchema proxy a
proxy Schema
schema =
let
typeRep :: TypeRep
typeRep = proxy a -> TypeRep
forall k (proxy :: k -> *) (a :: k).
Typeable a =>
proxy a -> TypeRep
Typeable.typeRep proxy a
proxy
tyCon :: TyCon
tyCon = TypeRep -> TyCon
Typeable.typeRepTyCon TypeRep
typeRep
moduleName :: String
moduleName = TyCon -> String
Typeable.tyConModule TyCon
tyCon
typeName :: String
typeName = TyCon -> String
Typeable.tyConName TyCon
tyCon
nameString :: String
nameString = [String] -> String
forall a. Monoid a => [a] -> a
mconcat [String
moduleName, String
".", String
typeName]
nameText :: Text
nameText = String -> Text
Text.pack String
nameString
in Maybe Text -> Schema -> NamedSchema
Swagger.NamedSchema (Text -> Maybe Text
forall a. a -> Maybe a
Just Text
nameText) Schema
schema