{-# LANGUAGE ConstraintKinds #-}

module Prolude.Swagger 
    ( Swagger.SwaggerType(..)
    , SwaggerToSchema
    , SwaggerToParamSchema
    , defaultDeclareNamedSchema
    )
where

import qualified Data.Swagger as Swagger
import qualified Data.Swagger.Declare as Swagger
import qualified Data.Swagger.Internal.Schema as Swagger
import qualified Data.Swagger.Internal.TypeShape as Swagger

type SwaggerToParamSchema = Swagger.ToParamSchema
type SwaggerToSchema = Swagger.ToSchema

defaultDeclareNamedSchema
  :: Applicative f => (Swagger.Schema -> Swagger.Schema) -> proxy a -> f Swagger.NamedSchema
defaultDeclareNamedSchema :: (Schema -> Schema) -> proxy a -> f NamedSchema
defaultDeclareNamedSchema Schema -> Schema
f = f NamedSchema -> proxy a -> f NamedSchema
forall a b. a -> b -> a
const (f NamedSchema -> proxy a -> f NamedSchema)
-> (Schema -> f NamedSchema) -> Schema -> proxy a -> f NamedSchema
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NamedSchema -> f NamedSchema
forall (f :: * -> *) a. Applicative f => a -> f a
pure (NamedSchema -> f NamedSchema)
-> (Schema -> NamedSchema) -> Schema -> f NamedSchema
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe Text -> Schema -> NamedSchema
Swagger.NamedSchema Maybe Text
forall a. Maybe a
Nothing (Schema -> proxy a -> f NamedSchema)
-> Schema -> proxy a -> f NamedSchema
forall a b. (a -> b) -> a -> b
$ Schema -> Schema
f Schema
forall a. Monoid a => a
mempty