{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE UndecidableInstances #-}
module Composite.Swagger.OrphanInstances where
import Composite ((:->), Record)
import Control.Lens ((%~), (&))
import qualified Data.HashMap.Strict.InsOrd as I
import Data.Proxy (Proxy (Proxy))
import Data.Swagger
( NamedSchema (NamedSchema), ToSchema
, declareNamedSchema, declareSchemaRef, properties, schema )
import qualified Data.Text as Text
import GHC.TypeLits (KnownSymbol, symbolVal)
instance ToSchema (Record '[]) where
declareNamedSchema _ = pure $ NamedSchema Nothing mempty
instance forall a s rs. (ToSchema a, ToSchema (Record rs), KnownSymbol s) => ToSchema (Record ((s :-> a) ': rs)) where
declareNamedSchema _ = do
xs <- declareNamedSchema (Proxy :: Proxy (Record rs))
x <- declareSchemaRef (Proxy :: Proxy a)
let name = Text.pack $ symbolVal (Proxy :: Proxy s)
pure $ xs
& schema.properties %~ I.insert name x