@@ -138,7 +138,8 @@ class ToSchema a where
138 -- Note that the schema itself is included in definitions
138 -- Note that the schema itself is included in definitions
139 -- only if it is recursive (and thus needs its definition in scope).
139 -- only if it is recursive (and thus needs its definition in scope).
140 declareNamedSchema :: proxy a -> Declare (Definitions Schema) NamedSchema
140 declareNamedSchema :: proxy a -> Declare (Definitions Schema) NamedSchema
141+ default declareNamedSchema :: (Generic a, GToSchema (Rep a), TypeHasSimpleShape a "genericDeclareNamedSchemaUnrestricted") =>
141− default declareNamedSchema :: (Generic a, GToSchema (Rep a)) => proxy a -> Declare (Definitions Schema) NamedSchema
142+ proxy a -> Declare (Definitions Schema) NamedSchema
142 declareNamedSchema = genericDeclareNamedSchema defaultSchemaOptions
143 declareNamedSchema = genericDeclareNamedSchema defaultSchemaOptions
144-- | Convert a type into a schema and declare all used schema definitions.
145-- | Convert a type into a schema and declare all used schema definitions.
@@ -582,15 +583,32 @@ genericToNamedSchemaBoundedIntegral opts proxy
582 = NamedSchema (gdatatypeSchemaName opts (Proxy :: Proxy d)) (toSchemaBoundedIntegral proxy)
583 = NamedSchema (gdatatypeSchemaName opts (Proxy :: Proxy d)) (toSchemaBoundedIntegral proxy)
584-- | A configurable generic @'Schema'@ creator.
585-- | A configurable generic @'Schema'@ creator.
586+genericDeclareSchema :: (Generic a, GToSchema (Rep a), TypeHasSimpleShape a "genericDeclareSchemaUnrestricted") =>
585−genericDeclareSchema :: (Generic a, GToSchema (Rep a)) => SchemaOptions -> proxy a -> Declare (Definitions Schema) Schema
587+ SchemaOptions -> proxy a -> Declare (Definitions Schema) Schema
586−genericDeclareSchema opts proxy = _namedSchemaSchema <$> genericDeclareNamedSchema opts proxy
588+genericDeclareSchema = genericDeclareSchemaUnrestricted
588-- | A configurable generic @'NamedSchema'@ creator.
590-- | A configurable generic @'NamedSchema'@ creator.
589-- This function applied to @'defaultSchemaOptions'@
591-- This function applied to @'defaultSchemaOptions'@
590-- is used as the default for @'declareNamedSchema'@
592-- is used as the default for @'declareNamedSchema'@
591-- when the type is an instance of @'Generic'@.
593-- when the type is an instance of @'Generic'@.
592−genericDeclareNamedSchema :: forall a proxy. (Generic a, GToSchema (Rep a)) => SchemaOptions -> proxy a -> Declare (Definitions Schema) NamedSchema
594+genericDeclareNamedSchema :: forall a proxy. (Generic a, GToSchema (Rep a), TypeHasSimpleShape a "genericDeclareNamedSchemaUnrestricted") =>
595+ SchemaOptions -> proxy a -> Declare (Definitions Schema) NamedSchema
596+genericDeclareNamedSchema = genericDeclareNamedSchemaUnrestricted
598+-- | A configurable generic @'Schema'@ creator.
600+-- Unlike 'genericDeclareSchema' also works for mixed sum types.
601+-- Use with care since some Swagger tools do not support well schemas for mixed sum types.
602+genericDeclareSchemaUnrestricted :: (Generic a, GToSchema (Rep a)) => SchemaOptions -> proxy a -> Declare (Definitions Schema) Schema
603+genericDeclareSchemaUnrestricted opts proxy = _namedSchemaSchema <$> genericDeclareNamedSchemaUnrestricted opts proxy
605+-- | A configurable generic @'NamedSchema'@ creator.
607+-- Unlike 'genericDeclareNamedSchema' also works for mixed sum types.
608+-- Use with care since some Swagger tools do not support well schemas for mixed sum types.
609+genericDeclareNamedSchemaUnrestricted :: forall a proxy. (Generic a, GToSchema (Rep a)) =>
610+ SchemaOptions -> proxy a -> Declare (Definitions Schema) NamedSchema
593−genericDeclareNamedSchema opts _ = gdeclareNamedSchema opts (Proxy :: Proxy (Rep a)) mempty
611+genericDeclareNamedSchemaUnrestricted opts _ = gdeclareNamedSchema opts (Proxy :: Proxy (Rep a)) mempty
595gdatatypeSchemaName :: forall proxy d. Datatype d => SchemaOptions -> proxy d -> Maybe T.Text
613gdatatypeSchemaName :: forall proxy d. Datatype d => SchemaOptions -> proxy d -> Maybe T.Text
596gdatatypeSchemaName opts _ = case name of
614gdatatypeSchemaName opts _ = case name of
@@ -711,9 +729,7 @@ instance OVERLAPPABLE_ ToSchema c => GToSchema (K1 i c) where
712instance ( GSumToSchema f
730instance ( GSumToSchema f
713 , GSumToSchema g
731 , GSumToSchema g
714− , LegalShape (GenericShape (f :+: g))
716− ) => GToSchema (f :+: g)
732+ ) => GToSchema (f :+: g)
718 gdeclareNamedSchema = gdeclareNamedSumSchema
734 gdeclareNamedSchema = gdeclareNamedSumSchema