composite-swagger-0.5.4.0: src/Composite/Swagger/Base.hs
module Composite.Swagger.Base where
import Control.Lens (Unwrapped, Wrapped, (&), (.~))
import Composite.Swagger.OrphanInstances ()
import Data.Proxy (Proxy (Proxy))
import Data.Swagger
( Definitions, NamedSchema(NamedSchema), Schema, SwaggerType(SwaggerObject), ToSchema
, declareSchema, type_ )
import Data.Swagger.Declare (Declare)
import qualified Data.Text as Text
-- |Given a 'Control.Lens.Wrapped' and an underlying 'Data.Swagger.ToSchema' instance, create a
-- Schema with the given name surrounding the underlying instance.
wrappedSchema :: (Wrapped wrap, ToSchema (Unwrapped wrap)) => Proxy wrap -> String -> Declare (Definitions Schema) NamedSchema
wrappedSchema (Proxy :: Proxy wrap) name = do
s <- declareSchema (Proxy :: Proxy (Unwrapped wrap))
pure $ NamedSchema (Just $ Text.pack name) s
& type_ .~ SwaggerObject