@@ -32,7 +32,7 @@ import Data.Data.Lens (template)
33import Control.Monad
33import Control.Monad
34import Control.Monad.Writer
34import Control.Monad.Writer
35−import Data.Aeson (ToJSON (..), ToJSONKey (..), ToJSONKeyFunction (..), Value (..), Object(..))
35+import Data.Aeson (ToJSON (..), ToJSONKey (..), ToJSONKeyFunction (..), Value (..))
36import Data.Char
36import Data.Char
37import Data.Data (Data)
37import Data.Data (Data)
38import Data.Foldable (traverse_)
38import Data.Foldable (traverse_)
@@ -44,7 +44,7 @@ import qualified Data.HashMap.Strict.InsOrd as InsOrdHashMap
44import Data.Int
44import Data.Int
45import Data.IntSet (IntSet)
45import Data.IntSet (IntSet)
46import Data.IntMap (IntMap)
46import Data.IntMap (IntMap)
47−import Data.List.NonEmpty.Compat (NonEmpty)
47+import Data.List.NonEmpty (NonEmpty)
48import Data.Map (Map)
48import Data.Map (Map)
49import Data.Proxy
49import Data.Proxy
50import Data.Scientific (Scientific)
50import Data.Scientific (Scientific)
@@ -58,7 +58,7 @@ import qualified Data.Vector.Primitive as VP
58import qualified Data.Vector.Storable as VS
58import qualified Data.Vector.Storable as VS
59import qualified Data.Vector.Unboxed as VU
59import qualified Data.Vector.Unboxed as VU
60import Data.Version (Version)
60import Data.Version (Version)
61−import Numeric.Natural.Compat (Natural)
61+import Numeric.Natural
62import Data.Word
62import Data.Word
63import GHC.Generics
63import GHC.Generics
64import qualified Data.UUID.Types as UUID
64import qualified Data.UUID.Types as UUID
@@ -111,7 +111,7 @@ rename name (NamedSchema _ schema) = NamedSchema name schema
111-- declareNamedSchema _ = do
111-- declareNamedSchema _ = do
112-- doubleSchema <- declareSchemaRef (Proxy :: Proxy Double)
112-- doubleSchema <- declareSchemaRef (Proxy :: Proxy Double)
113-- return $ NamedSchema (Just \"Coord\") $ mempty
113-- return $ NamedSchema (Just \"Coord\") $ mempty
114−-- & type_ ?~ SwaggerObject
114+-- & type_ .~ SwaggerObject
115-- & properties .~
115-- & properties .~
116-- [ (\"x\", doubleSchema)
116-- [ (\"x\", doubleSchema)
117-- , (\"y\", doubleSchema)
117-- , (\"y\", doubleSchema)
@@ -142,17 +142,13 @@ class ToSchema a where
142 -- together with all used definitions.
142 -- together with all used definitions.
143 -- Note that the schema itself is included in definitions
143 -- Note that the schema itself is included in definitions
144 -- only if it is recursive (and thus needs its definition in scope).
144 -- only if it is recursive (and thus needs its definition in scope).
145− declareNamedSchema :: Proxy a -> Declare (Definitions Schema) NamedSchema
145+ declareNamedSchema :: proxy a -> Declare (Definitions Schema) NamedSchema
146 default declareNamedSchema :: (Generic a, GToSchema (Rep a), TypeHasSimpleShape a "genericDeclareNamedSchemaUnrestricted") =>
146 default declareNamedSchema :: (Generic a, GToSchema (Rep a), TypeHasSimpleShape a "genericDeclareNamedSchemaUnrestricted") =>
147− Proxy a -> Declare (Definitions Schema) NamedSchema
147+ proxy a -> Declare (Definitions Schema) NamedSchema
148 declareNamedSchema = genericDeclareNamedSchema defaultSchemaOptions
148 declareNamedSchema = genericDeclareNamedSchema defaultSchemaOptions
150−instance ToSchema TimeOfDay where
151− declareNamedSchema _ = pure $ named "TimeOfDay" $ timeSchema "hh:MM:ss"
152− & example ?~ toJSON (TimeOfDay 12 33 15)
154-- | Convert a type into a schema and declare all used schema definitions.
150-- | Convert a type into a schema and declare all used schema definitions.
155−declareSchema :: ToSchema a => Proxy a -> Declare (Definitions Schema) Schema
151+declareSchema :: ToSchema a => proxy a -> Declare (Definitions Schema) Schema
156declareSchema = fmap _namedSchemaSchema . declareNamedSchema
152declareSchema = fmap _namedSchemaSchema . declareNamedSchema
158-- | Convert a type into an optionally named schema.
154-- | Convert a type into an optionally named schema.
@@ -166,7 +162,7 @@ declareSchema = fmap _namedSchemaSchema . declareNamedSchema
166-- Just "Day"
162-- Just "Day"
167-- >>> encode (toNamedSchema (Proxy :: Proxy Day) ^. schema)
163-- >>> encode (toNamedSchema (Proxy :: Proxy Day) ^. schema)
168-- "{\"example\":\"2016-07-22\",\"format\":\"date\",\"type\":\"string\"}"
164-- "{\"example\":\"2016-07-22\",\"format\":\"date\",\"type\":\"string\"}"
169−toNamedSchema :: ToSchema a => Proxy a -> NamedSchema
165+toNamedSchema :: ToSchema a => proxy a -> NamedSchema
170toNamedSchema = undeclare . declareNamedSchema
166toNamedSchema = undeclare . declareNamedSchema
172-- | Get type's schema name according to its @'ToSchema'@ instance.
168-- | Get type's schema name according to its @'ToSchema'@ instance.
@@ -176,7 +172,7 @@ toNamedSchema = undeclare . declareNamedSchema
177-- >>> schemaName (Proxy :: Proxy UTCTime)
173-- >>> schemaName (Proxy :: Proxy UTCTime)
178-- Just "UTCTime"
174-- Just "UTCTime"
179−schemaName :: ToSchema a => Proxy a -> Maybe T.Text
175+schemaName :: ToSchema a => proxy a -> Maybe T.Text
180schemaName = _namedSchemaName . toNamedSchema
176schemaName = _namedSchemaName . toNamedSchema
182-- | Convert a type into a schema.
178-- | Convert a type into a schema.
@@ -186,7 +182,7 @@ schemaName = _namedSchemaName . toNamedSchema
187-- >>> encode $ toSchema (Proxy :: Proxy [Day])
183-- >>> encode $ toSchema (Proxy :: Proxy [Day])
188-- "{\"items\":{\"$ref\":\"#/definitions/Day\"},\"type\":\"array\"}"
184-- "{\"items\":{\"$ref\":\"#/definitions/Day\"},\"type\":\"array\"}"
189−toSchema :: ToSchema a => Proxy a -> Schema
185+toSchema :: ToSchema a => proxy a -> Schema
190toSchema = _namedSchemaSchema . toNamedSchema
186toSchema = _namedSchemaSchema . toNamedSchema
192-- | Convert a type into a referenced schema if possible.
188-- | Convert a type into a referenced schema if possible.
@@ -197,7 +193,7 @@ toSchema = _namedSchemaSchema . toNamedSchema
198-- >>> encode $ toSchemaRef (Proxy :: Proxy Day)
194-- >>> encode $ toSchemaRef (Proxy :: Proxy Day)
199-- "{\"$ref\":\"#/definitions/Day\"}"
195-- "{\"$ref\":\"#/definitions/Day\"}"
200−toSchemaRef :: ToSchema a => Proxy a -> Referenced Schema
196+toSchemaRef :: ToSchema a => proxy a -> Referenced Schema
201toSchemaRef = undeclare . declareSchemaRef
197toSchemaRef = undeclare . declareSchemaRef
203-- | Convert a type into a referenced schema if possible
199-- | Convert a type into a referenced schema if possible
@@ -207,7 +203,7 @@ toSchemaRef = undeclare . declareSchemaRef
207-- Schema definitions are typically declared for every referenced schema.
203-- Schema definitions are typically declared for every referenced schema.
208-- If @'declareSchemaRef'@ returns a reference, a corresponding schema
204-- If @'declareSchemaRef'@ returns a reference, a corresponding schema
209-- will be declared (regardless of whether it is recusive or not).
205-- will be declared (regardless of whether it is recusive or not).
210−declareSchemaRef :: ToSchema a => Proxy a -> Declare (Definitions Schema) (Referenced Schema)
206+declareSchemaRef :: ToSchema a => proxy a -> Declare (Definitions Schema) (Referenced Schema)
211declareSchemaRef proxy = do
207declareSchemaRef proxy = do
212 case toNamedSchema proxy of
208 case toNamedSchema proxy of
213 NamedSchema (Just name) schema -> do
209 NamedSchema (Just name) schema -> do
@@ -269,7 +265,7 @@ inlineAllSchemas = inlineSchemasWhen (const True)
270-- __WARNING:__ @'toInlinedSchema'@ will produce infinite schema
266-- __WARNING:__ @'toInlinedSchema'@ will produce infinite schema
271-- when inlining recursive schemas.
267-- when inlining recursive schemas.
272−toInlinedSchema :: ToSchema a => Proxy a -> Schema
268+toInlinedSchema :: ToSchema a => proxy a -> Schema
273toInlinedSchema proxy = inlineAllSchemas defs schema
269toInlinedSchema proxy = inlineAllSchemas defs schema
275 (defs, schema) = runDeclare (declareSchema proxy) mempty
271 (defs, schema) = runDeclare (declareSchema proxy) mempty
@@ -298,20 +294,20 @@ inlineNonRecursiveSchemas defs = inlineSchemasWhen nonRecursive defs
298-- | Default schema for binary data (any sequence of octets).
294-- | Default schema for binary data (any sequence of octets).
299binarySchema :: Schema
295binarySchema :: Schema
300binarySchema = mempty
296binarySchema = mempty
301− & type_ ?~ SwaggerString
297+ & type_ .~ SwaggerString
302 & format ?~ "binary"
298 & format ?~ "binary"
304-- | Default schema for binary data (base64 encoded).
300-- | Default schema for binary data (base64 encoded).
305byteSchema :: Schema
301byteSchema :: Schema
306byteSchema = mempty
302byteSchema = mempty
307− & type_ ?~ SwaggerString
303+ & type_ .~ SwaggerString
308 & format ?~ "byte"
304 & format ?~ "byte"
310-- | Default schema for password string.
306-- | Default schema for password string.
311-- @"password"@ format is used to hint UIs the input needs to be obscured.
307-- @"password"@ format is used to hint UIs the input needs to be obscured.
312passwordSchema :: Schema
308passwordSchema :: Schema
313passwordSchema = mempty
309passwordSchema = mempty
314− & type_ ?~ SwaggerString
310+ & type_ .~ SwaggerString
315 & format ?~ "password"
311 & format ?~ "password"
317-- | Make an unrestrictive sketch of a @'Schema'@ based on a @'ToJSON'@ instance.
313-- | Make an unrestrictive sketch of a @'Schema'@ based on a @'ToJSON'@ instance.
@@ -337,12 +333,12 @@ sketchSchema = sketch . toJSON
337 sketch js@(Bool _) = go js
333 sketch js@(Bool _) = go js
338 sketch js = go js & example ?~ js
334 sketch js = go js & example ?~ js
340− go Null = mempty & type_ ?~ SwaggerNull
336+ go Null = mempty & type_ .~ SwaggerNull
341− go (Bool _) = mempty & type_ ?~ SwaggerBoolean
337+ go (Bool _) = mempty & type_ .~ SwaggerBoolean
342− go (String _) = mempty & type_ ?~ SwaggerString
338+ go (String _) = mempty & type_ .~ SwaggerString
343− go (Number _) = mempty & type_ ?~ SwaggerNumber
339+ go (Number _) = mempty & type_ .~ SwaggerNumber
344 go (Array xs) = mempty
340 go (Array xs) = mempty
345− & type_ ?~ SwaggerArray
341+ & type_ .~ SwaggerArray
346 & items ?~ case ischema of
342 & items ?~ case ischema of
347 Just s -> SwaggerItemsObject (Inline s)
343 Just s -> SwaggerItemsObject (Inline s)
348 _ -> SwaggerItemsArray (map Inline ys)
344 _ -> SwaggerItemsArray (map Inline ys)
@@ -354,7 +350,7 @@ sketchSchema = sketch . toJSON
354 (z:_) | allSame -> Just z
350 (z:_) | allSame -> Just z
355 _ -> Nothing
351 _ -> Nothing
356 go (Object o) = mempty
352 go (Object o) = mempty
357− & type_ ?~ SwaggerObject
353+ & type_ .~ SwaggerObject
358 & required .~ HashMap.keys o
354 & required .~ HashMap.keys o
359 & properties .~ fmap (Inline . go) (InsOrdHashMap.fromHashMap o)
355 & properties .~ fmap (Inline . go) (InsOrdHashMap.fromHashMap o)
@@ -377,24 +373,24 @@ sketchSchema = sketch . toJSON
377sketchStrictSchema :: ToJSON a => a -> Schema
373sketchStrictSchema :: ToJSON a => a -> Schema
378sketchStrictSchema = go . toJSON
374sketchStrictSchema = go . toJSON
380− go Null = mempty & type_ ?~ SwaggerNull
376+ go Null = mempty & type_ .~ SwaggerNull
381 go js@(Bool _) = mempty
377 go js@(Bool _) = mempty
382− & type_ ?~ SwaggerBoolean
378+ & type_ .~ SwaggerBoolean
383 & enum_ ?~ [js]
379 & enum_ ?~ [js]
384 go js@(String s) = mempty
380 go js@(String s) = mempty
385− & type_ ?~ SwaggerString
381+ & type_ .~ SwaggerString
386 & maxLength ?~ fromIntegral (T.length s)
382 & maxLength ?~ fromIntegral (T.length s)
387 & minLength ?~ fromIntegral (T.length s)
383 & minLength ?~ fromIntegral (T.length s)
388 & pattern ?~ s
384 & pattern ?~ s
389 & enum_ ?~ [js]
385 & enum_ ?~ [js]
390 go js@(Number n) = mempty
386 go js@(Number n) = mempty
391− & type_ ?~ SwaggerNumber
387+ & type_ .~ SwaggerNumber
392 & maximum_ ?~ n
388 & maximum_ ?~ n
393 & minimum_ ?~ n
389 & minimum_ ?~ n
394 & multipleOf ?~ n
390 & multipleOf ?~ n
395 & enum_ ?~ [js]
391 & enum_ ?~ [js]
396 go js@(Array xs) = mempty
392 go js@(Array xs) = mempty
397− & type_ ?~ SwaggerArray
393+ & type_ .~ SwaggerArray
398 & maxItems ?~ fromIntegral sz
394 & maxItems ?~ fromIntegral sz
399 & minItems ?~ fromIntegral sz
395 & minItems ?~ fromIntegral sz
400 & items ?~ SwaggerItemsArray (map (Inline . go) (V.toList xs))
396 & items ?~ SwaggerItemsArray (map (Inline . go) (V.toList xs))
@@ -404,7 +400,7 @@ sketchStrictSchema = go . toJSON
404 sz = length xs
400 sz = length xs
405 allUnique = sz == HashSet.size (HashSet.fromList (V.toList xs))
401 allUnique = sz == HashSet.size (HashSet.fromList (V.toList xs))
406 go js@(Object o) = mempty
402 go js@(Object o) = mempty
407− & type_ ?~ SwaggerObject
403+ & type_ .~ SwaggerObject
408 & required .~ names
404 & required .~ names
409 & properties .~ fmap (Inline . go) (InsOrdHashMap.fromHashMap o)
405 & properties .~ fmap (Inline . go) (InsOrdHashMap.fromHashMap o)
410 & maxProperties ?~ fromIntegral (length names)
406 & maxProperties ?~ fromIntegral (length names)
@@ -414,13 +410,13 @@ sketchStrictSchema = go . toJSON
414 names = HashMap.keys o
410 names = HashMap.keys o
416class GToSchema (f :: * -> *) where
412class GToSchema (f :: * -> *) where
417− gdeclareNamedSchema :: SchemaOptions -> Proxy f -> Schema -> Declare (Definitions Schema) NamedSchema
413+ gdeclareNamedSchema :: SchemaOptions -> proxy f -> Schema -> Declare (Definitions Schema) NamedSchema
419instance OVERLAPPABLE_ ToSchema a => ToSchema [a] where
415instance OVERLAPPABLE_ ToSchema a => ToSchema [a] where
420 declareNamedSchema _ = do
416 declareNamedSchema _ = do
421 ref <- declareSchemaRef (Proxy :: Proxy a)
417 ref <- declareSchemaRef (Proxy :: Proxy a)
422 return $ unnamed $ mempty
418 return $ unnamed $ mempty
423− & type_ ?~ SwaggerArray
419+ & type_ .~ SwaggerArray
424 & items ?~ SwaggerItemsObject ref
420 & items ?~ SwaggerItemsObject ref
426instance OVERLAPPING_ ToSchema String where declareNamedSchema = plain . paramSchemaToSchema
422instance OVERLAPPING_ ToSchema String where declareNamedSchema = plain . paramSchemaToSchema
@@ -470,7 +466,7 @@ instance (ToSchema a, ToSchema b, ToSchema c, ToSchema d, ToSchema e, ToSchema f
471timeSchema :: T.Text -> Schema
467timeSchema :: T.Text -> Schema
472timeSchema fmt = mempty
468timeSchema fmt = mempty
473− & type_ ?~ SwaggerString
469+ & type_ .~ SwaggerString
474 & format ?~ fmt
470 & format ?~ fmt
476-- | Format @"date"@ corresponds to @yyyy-mm-dd@ format.
472-- | Format @"date"@ corresponds to @yyyy-mm-dd@ format.
@@ -532,8 +528,8 @@ instance (ToJSONKey k, ToSchema k, ToSchema v) => ToSchema (Map k v) where
532 declareObjectMapSchema = do
528 declareObjectMapSchema = do
533 schema <- declareSchemaRef (Proxy :: Proxy v)
529 schema <- declareSchemaRef (Proxy :: Proxy v)
534 return $ unnamed $ mempty
530 return $ unnamed $ mempty
535− & type_ ?~ SwaggerObject
531+ & type_ .~ SwaggerObject
536− & additionalProperties ?~ AdditionalPropertiesSchema schema
532+ & additionalProperties ?~ schema
538instance (ToJSONKey k, ToSchema k, ToSchema v) => ToSchema (HashMap k v) where
534instance (ToJSONKey k, ToSchema k, ToSchema v) => ToSchema (HashMap k v) where
539 declareNamedSchema _ = declareNamedSchema (Proxy :: Proxy (Map k v))
535 declareNamedSchema _ = declareNamedSchema (Proxy :: Proxy (Map k v))
@@ -544,7 +540,7 @@ instance ToSchema a => ToSchema (Map String a) where
544 declareNamedSchema _ = do
540 declareNamedSchema _ = do
545 schema <- declareSchemaRef (Proxy :: Proxy a)
541 schema <- declareSchemaRef (Proxy :: Proxy a)
546 return $ unnamed $ mempty
542 return $ unnamed $ mempty
547− & type_ ?~ SwaggerObject
543+ & type_ .~ SwaggerObject
548 & additionalProperties ?~ schema
544 & additionalProperties ?~ schema
550instance ToSchema a => ToSchema (Map T.Text a) where declareNamedSchema _ = declareNamedSchema (Proxy :: Proxy (Map String a))
546instance ToSchema a => ToSchema (Map T.Text a) where declareNamedSchema _ = declareNamedSchema (Proxy :: Proxy (Map String a))
@@ -556,12 +552,6 @@ instance ToSchema a => ToSchema (HashMap TL.Text a) where declareNamedSchema _ =
559−instance OVERLAPPING_ ToSchema Object where
560− declareNamedSchema _ = pure $ NamedSchema (Just "Object") $ mempty
561− & type_ ?~ SwaggerObject
562− & description ?~ "Arbitrary JSON object."
563− & additionalProperties ?~ AdditionalPropertiesAllowed True
565instance ToSchema a => ToSchema (V.Vector a) where declareNamedSchema _ = declareNamedSchema (Proxy :: Proxy [a])
555instance ToSchema a => ToSchema (V.Vector a) where declareNamedSchema _ = declareNamedSchema (Proxy :: Proxy [a])
566instance ToSchema a => ToSchema (VU.Vector a) where declareNamedSchema _ = declareNamedSchema (Proxy :: Proxy [a])
556instance ToSchema a => ToSchema (VU.Vector a) where declareNamedSchema _ = declareNamedSchema (Proxy :: Proxy [a])
567instance ToSchema a => ToSchema (VS.Vector a) where declareNamedSchema _ = declareNamedSchema (Proxy :: Proxy [a])
557instance ToSchema a => ToSchema (VS.Vector a) where declareNamedSchema _ = declareNamedSchema (Proxy :: Proxy [a])
@@ -597,26 +587,26 @@ instance ToSchema a => ToSchema (Identity a) where declareNamedSchema _ = declar
598-- >>> encode $ toSchemaBoundedIntegral (Proxy :: Proxy Int16)
588-- >>> encode $ toSchemaBoundedIntegral (Proxy :: Proxy Int16)
599-- "{\"maximum\":32767,\"minimum\":-32768,\"type\":\"integer\"}"
589-- "{\"maximum\":32767,\"minimum\":-32768,\"type\":\"integer\"}"
600−toSchemaBoundedIntegral :: forall a. (Bounded a, Integral a) => Proxy a -> Schema
590+toSchemaBoundedIntegral :: forall a proxy. (Bounded a, Integral a) => proxy a -> Schema
601toSchemaBoundedIntegral _ = mempty
591toSchemaBoundedIntegral _ = mempty
602− & type_ ?~ SwaggerInteger
592+ & type_ .~ SwaggerInteger
603 & minimum_ ?~ fromInteger (toInteger (minBound :: a))
593 & minimum_ ?~ fromInteger (toInteger (minBound :: a))
604 & maximum_ ?~ fromInteger (toInteger (maxBound :: a))
594 & maximum_ ?~ fromInteger (toInteger (maxBound :: a))
606-- | Default generic named schema for @'Bounded'@, @'Integral'@ types.
596-- | Default generic named schema for @'Bounded'@, @'Integral'@ types.
607−genericToNamedSchemaBoundedIntegral :: forall a d f.
597+genericToNamedSchemaBoundedIntegral :: forall a d f proxy.
608 ( Bounded a, Integral a
598 ( Bounded a, Integral a
609 , Generic a, Rep a ~ D1 d f, Datatype d)
599 , Generic a, Rep a ~ D1 d f, Datatype d)
610− => SchemaOptions -> Proxy a -> NamedSchema
600+ => SchemaOptions -> proxy a -> NamedSchema
611genericToNamedSchemaBoundedIntegral opts proxy
601genericToNamedSchemaBoundedIntegral opts proxy
612 = genericNameSchema opts proxy (toSchemaBoundedIntegral proxy)
602 = genericNameSchema opts proxy (toSchemaBoundedIntegral proxy)
614-- | Declare a named schema for a @newtype@ wrapper.
604-- | Declare a named schema for a @newtype@ wrapper.
615−genericDeclareNamedSchemaNewtype :: forall a d c s i inner.
605+genericDeclareNamedSchemaNewtype :: forall proxy a d c s i inner.
616 (Generic a, Datatype d, Rep a ~ D1 d (C1 c (S1 s (K1 i inner))))
606 (Generic a, Datatype d, Rep a ~ D1 d (C1 c (S1 s (K1 i inner))))
617 => SchemaOptions -- ^ How to derive the name.
607 => SchemaOptions -- ^ How to derive the name.
618 -> (Proxy inner -> Declare (Definitions Schema) Schema) -- ^ How to create a schema for the wrapped type.
608 -> (Proxy inner -> Declare (Definitions Schema) Schema) -- ^ How to create a schema for the wrapped type.
619− -> Proxy a
609+ -> proxy a
620 -> Declare (Definitions Schema) NamedSchema
610 -> Declare (Definitions Schema) NamedSchema
621genericDeclareNamedSchemaNewtype opts f proxy = genericNameSchema opts proxy <$> f (Proxy :: Proxy inner)
611genericDeclareNamedSchemaNewtype opts f proxy = genericNameSchema opts proxy <$> f (Proxy :: Proxy inner)
@@ -633,9 +623,9 @@ genericDeclareNamedSchemaNewtype opts f proxy = genericNameSchema opts proxy <$>
634-- Note: this is only useful when @key@ is encoded with 'ToJSONKeyText'.
624-- Note: this is only useful when @key@ is encoded with 'ToJSONKeyText'.
635-- If it is encoded with 'ToJSONKeyValue' then a regular schema for @[(key, value)]@ is used.
625-- If it is encoded with 'ToJSONKeyValue' then a regular schema for @[(key, value)]@ is used.
636−declareSchemaBoundedEnumKeyMapping :: forall map key value.
626+declareSchemaBoundedEnumKeyMapping :: forall map key value proxy.
637 (Bounded key, Enum key, ToJSONKey key, ToSchema key, ToSchema value)
627 (Bounded key, Enum key, ToJSONKey key, ToSchema key, ToSchema value)
638− => Proxy (map key value) -> Declare (Definitions Schema) Schema
628+ => proxy (map key value) -> Declare (Definitions Schema) Schema
639declareSchemaBoundedEnumKeyMapping _ = case toJSONKey :: ToJSONKeyFunction key of
629declareSchemaBoundedEnumKeyMapping _ = case toJSONKey :: ToJSONKeyFunction key of
640 ToJSONKeyText keyToText _ -> objectSchema keyToText
630 ToJSONKeyText keyToText _ -> objectSchema keyToText
641 ToJSONKeyValue _ _ -> declareSchema (Proxy :: Proxy [(key, value)])
631 ToJSONKeyValue _ _ -> declareSchema (Proxy :: Proxy [(key, value)])
@@ -645,7 +635,7 @@ declareSchemaBoundedEnumKeyMapping _ = case toJSONKey :: ToJSONKeyFunction key o
645 let allKeys = [minBound..maxBound :: key]
635 let allKeys = [minBound..maxBound :: key]
646 mkPair k = (keyToText k, valueRef)
636 mkPair k = (keyToText k, valueRef)
647 return $ mempty
637 return $ mempty
648− & type_ ?~ SwaggerObject
638+ & type_ .~ SwaggerObject
649 & properties .~ InsOrdHashMap.fromList (map mkPair allKeys)
639 & properties .~ InsOrdHashMap.fromList (map mkPair allKeys)
651-- | A 'Schema' for a mapping with 'Bounded' 'Enum' keys.
641-- | A 'Schema' for a mapping with 'Bounded' 'Enum' keys.
@@ -661,46 +651,46 @@ declareSchemaBoundedEnumKeyMapping _ = case toJSONKey :: ToJSONKeyFunction key o
662-- Note: this is only useful when @key@ is encoded with 'ToJSONKeyText'.
652-- Note: this is only useful when @key@ is encoded with 'ToJSONKeyText'.
663-- If it is encoded with 'ToJSONKeyValue' then a regular schema for @[(key, value)]@ is used.
653-- If it is encoded with 'ToJSONKeyValue' then a regular schema for @[(key, value)]@ is used.
664−toSchemaBoundedEnumKeyMapping :: forall map key value.
654+toSchemaBoundedEnumKeyMapping :: forall map key value proxy.
665 (Bounded key, Enum key, ToJSONKey key, ToSchema key, ToSchema value)
655 (Bounded key, Enum key, ToJSONKey key, ToSchema key, ToSchema value)
666− => Proxy (map key value) -> Schema
656+ => proxy (map key value) -> Schema
667toSchemaBoundedEnumKeyMapping = flip evalDeclare mempty . declareSchemaBoundedEnumKeyMapping
657toSchemaBoundedEnumKeyMapping = flip evalDeclare mempty . declareSchemaBoundedEnumKeyMapping
669-- | A configurable generic @'Schema'@ creator.
659-- | A configurable generic @'Schema'@ creator.
670genericDeclareSchema :: (Generic a, GToSchema (Rep a), TypeHasSimpleShape a "genericDeclareSchemaUnrestricted") =>
660genericDeclareSchema :: (Generic a, GToSchema (Rep a), TypeHasSimpleShape a "genericDeclareSchemaUnrestricted") =>
671− SchemaOptions -> Proxy a -> Declare (Definitions Schema) Schema
661+ SchemaOptions -> proxy a -> Declare (Definitions Schema) Schema
672genericDeclareSchema = genericDeclareSchemaUnrestricted
662genericDeclareSchema = genericDeclareSchemaUnrestricted
674-- | A configurable generic @'NamedSchema'@ creator.
664-- | A configurable generic @'NamedSchema'@ creator.
675-- This function applied to @'defaultSchemaOptions'@
665-- This function applied to @'defaultSchemaOptions'@
676-- is used as the default for @'declareNamedSchema'@
666-- is used as the default for @'declareNamedSchema'@
677-- when the type is an instance of @'Generic'@.
667-- when the type is an instance of @'Generic'@.
678−genericDeclareNamedSchema :: (Generic a, GToSchema (Rep a), TypeHasSimpleShape a "genericDeclareNamedSchemaUnrestricted") =>
668+genericDeclareNamedSchema :: forall a proxy. (Generic a, GToSchema (Rep a), TypeHasSimpleShape a "genericDeclareNamedSchemaUnrestricted") =>
679− SchemaOptions -> Proxy a -> Declare (Definitions Schema) NamedSchema
669+ SchemaOptions -> proxy a -> Declare (Definitions Schema) NamedSchema
680genericDeclareNamedSchema = genericDeclareNamedSchemaUnrestricted
670genericDeclareNamedSchema = genericDeclareNamedSchemaUnrestricted
682-- | A configurable generic @'Schema'@ creator.
672-- | A configurable generic @'Schema'@ creator.
684-- Unlike 'genericDeclareSchema' also works for mixed sum types.
674-- Unlike 'genericDeclareSchema' also works for mixed sum types.
685-- Use with care since some Swagger tools do not support well schemas for mixed sum types.
675-- Use with care since some Swagger tools do not support well schemas for mixed sum types.
686−genericDeclareSchemaUnrestricted :: (Generic a, GToSchema (Rep a)) => SchemaOptions -> Proxy a -> Declare (Definitions Schema) Schema
676+genericDeclareSchemaUnrestricted :: (Generic a, GToSchema (Rep a)) => SchemaOptions -> proxy a -> Declare (Definitions Schema) Schema
687genericDeclareSchemaUnrestricted opts proxy = _namedSchemaSchema <$> genericDeclareNamedSchemaUnrestricted opts proxy
677genericDeclareSchemaUnrestricted opts proxy = _namedSchemaSchema <$> genericDeclareNamedSchemaUnrestricted opts proxy
689-- | A configurable generic @'NamedSchema'@ creator.
679-- | A configurable generic @'NamedSchema'@ creator.
691-- Unlike 'genericDeclareNamedSchema' also works for mixed sum types.
681-- Unlike 'genericDeclareNamedSchema' also works for mixed sum types.
692-- Use with care since some Swagger tools do not support well schemas for mixed sum types.
682-- Use with care since some Swagger tools do not support well schemas for mixed sum types.
693−genericDeclareNamedSchemaUnrestricted :: forall a. (Generic a, GToSchema (Rep a)) =>
683+genericDeclareNamedSchemaUnrestricted :: forall a proxy. (Generic a, GToSchema (Rep a)) =>
694− SchemaOptions -> Proxy a -> Declare (Definitions Schema) NamedSchema
684+ SchemaOptions -> proxy a -> Declare (Definitions Schema) NamedSchema
695genericDeclareNamedSchemaUnrestricted opts _ = gdeclareNamedSchema opts (Proxy :: Proxy (Rep a)) mempty
685genericDeclareNamedSchemaUnrestricted opts _ = gdeclareNamedSchema opts (Proxy :: Proxy (Rep a)) mempty
697-- | Derive a 'Generic'-based name for a datatype and assign it to a given 'Schema'.
687-- | Derive a 'Generic'-based name for a datatype and assign it to a given 'Schema'.
698−genericNameSchema :: forall a d f.
688+genericNameSchema :: forall a d f proxy.
699 (Generic a, Rep a ~ D1 d f, Datatype d)
689 (Generic a, Rep a ~ D1 d f, Datatype d)
700− => SchemaOptions -> Proxy a -> Schema -> NamedSchema
690+ => SchemaOptions -> proxy a -> Schema -> NamedSchema
701genericNameSchema opts _ = NamedSchema (gdatatypeSchemaName opts (Proxy :: Proxy d))
691genericNameSchema opts _ = NamedSchema (gdatatypeSchemaName opts (Proxy :: Proxy d))
703−gdatatypeSchemaName :: forall d. Datatype d => SchemaOptions -> Proxy d -> Maybe T.Text
693+gdatatypeSchemaName :: forall proxy d. Datatype d => SchemaOptions -> proxy d -> Maybe T.Text
704gdatatypeSchemaName opts _ = case orig of
694gdatatypeSchemaName opts _ = case orig of
705 (c:_) | isAlpha c && isUpper c -> Just (T.pack name)
695 (c:_) | isAlpha c && isUpper c -> Just (T.pack name)
706 _ -> Nothing
696 _ -> Nothing
@@ -709,23 +699,24 @@ gdatatypeSchemaName opts _ = case orig of
709 name = datatypeNameModifier opts orig
699 name = datatypeNameModifier opts orig
711-- | Lift a plain @'ParamSchema'@ into a model @'NamedSchema'@.
701-- | Lift a plain @'ParamSchema'@ into a model @'NamedSchema'@.
702+paramSchemaToNamedSchema :: forall a d f proxy.
712−paramSchemaToNamedSchema :: (ToParamSchema a, Generic a, Rep a ~ D1 d f, Datatype d) =>
703+ (ToParamSchema a, Generic a, Rep a ~ D1 d f, Datatype d)
713− SchemaOptions -> Proxy a -> NamedSchema
704+ => SchemaOptions -> proxy a -> NamedSchema
714paramSchemaToNamedSchema opts proxy = genericNameSchema opts proxy (paramSchemaToSchema proxy)
705paramSchemaToNamedSchema opts proxy = genericNameSchema opts proxy (paramSchemaToSchema proxy)
716-- | Lift a plain @'ParamSchema'@ into a model @'Schema'@.
707-- | Lift a plain @'ParamSchema'@ into a model @'Schema'@.
717−paramSchemaToSchema :: ToParamSchema a => Proxy a -> Schema
708+paramSchemaToSchema :: forall a proxy. ToParamSchema a => proxy a -> Schema
718−paramSchemaToSchema proxy = mempty & paramSchema .~ toParamSchema proxy
709+paramSchemaToSchema _ = mempty & paramSchema .~ toParamSchema (Proxy :: Proxy a)
720nullarySchema :: Schema
711nullarySchema :: Schema
721nullarySchema = mempty
712nullarySchema = mempty
722− & type_ ?~ SwaggerArray
713+ & type_ .~ SwaggerArray
723 & items ?~ SwaggerItemsArray []
714 & items ?~ SwaggerItemsArray []
725−gtoNamedSchema :: GToSchema f => SchemaOptions -> Proxy f -> NamedSchema
716+gtoNamedSchema :: GToSchema f => SchemaOptions -> proxy f -> NamedSchema
726gtoNamedSchema opts proxy = undeclare $ gdeclareNamedSchema opts proxy mempty
717gtoNamedSchema opts proxy = undeclare $ gdeclareNamedSchema opts proxy mempty
728−gdeclareSchema :: GToSchema f => SchemaOptions -> Proxy f -> Declare (Definitions Schema) Schema
719+gdeclareSchema :: GToSchema f => SchemaOptions -> proxy f -> Declare (Definitions Schema) Schema
729gdeclareSchema opts proxy = _namedSchemaSchema <$> gdeclareNamedSchema opts proxy mempty
720gdeclareSchema opts proxy = _namedSchemaSchema <$> gdeclareNamedSchema opts proxy mempty
731instance (GToSchema f, GToSchema g) => GToSchema (f :*: g) where
722instance (GToSchema f, GToSchema g) => GToSchema (f :*: g) where
@@ -759,7 +750,7 @@ instance (Selector s, GToSchema f, GToSchema (S1 s f)) => GToSchema (C1 c (S1 s
759 recordSchema = gdeclareNamedSchema opts (Proxy :: Proxy (S1 s f)) s
750 recordSchema = gdeclareNamedSchema opts (Proxy :: Proxy (S1 s f)) s
760 fieldSchema = gdeclareNamedSchema opts (Proxy :: Proxy f) s
751 fieldSchema = gdeclareNamedSchema opts (Proxy :: Proxy f) s
762−gdeclareSchemaRef :: GToSchema a => SchemaOptions -> Proxy a -> Declare (Definitions Schema) (Referenced Schema)
753+gdeclareSchemaRef :: GToSchema a => SchemaOptions -> proxy a -> Declare (Definitions Schema) (Referenced Schema)
763gdeclareSchemaRef opts proxy = do
754gdeclareSchemaRef opts proxy = do
764 case gtoNamedSchema opts proxy of
755 case gtoNamedSchema opts proxy of
765 NamedSchema (Just name) schema -> do
756 NamedSchema (Just name) schema -> do
@@ -790,12 +781,12 @@ withFieldSchema opts _ isRequiredField schema = do
791 if T.null fname
782 if T.null fname
792 then schema
783 then schema
793− & type_ ?~ SwaggerArray
784+ & type_ .~ SwaggerArray
794 & items %~ appendItem ref
785 & items %~ appendItem ref
795 & maxItems %~ Just . maybe 1 (+1) -- increment maxItems
786 & maxItems %~ Just . maybe 1 (+1) -- increment maxItems
796 & minItems %~ Just . maybe 1 (+1) -- increment minItems
787 & minItems %~ Just . maybe 1 (+1) -- increment minItems
797 else schema
788 else schema
798− & type_ ?~ SwaggerObject
789+ & type_ .~ SwaggerObject
799 & properties . at fname ?~ ref
790 & properties . at fname ?~ ref
800 & if isRequiredField
791 & if isRequiredField
801 then required %~ (++ [fname])
792 then required %~ (++ [fname])
@@ -823,7 +814,7 @@ instance ( GSumToSchema f
824 gdeclareNamedSchema = gdeclareNamedSumSchema
815 gdeclareNamedSchema = gdeclareNamedSumSchema
826−gdeclareNamedSumSchema :: GSumToSchema f => SchemaOptions -> Proxy f -> Schema -> Declare (Definitions Schema) NamedSchema
817+gdeclareNamedSumSchema :: GSumToSchema f => SchemaOptions -> proxy f -> Schema -> Declare (Definitions Schema) NamedSchema
827gdeclareNamedSumSchema opts proxy s
818gdeclareNamedSumSchema opts proxy s
828 | allNullaryToStringTag opts && allNullary = pure $ unnamed (toStringTag sumSchema)
819 | allNullaryToStringTag opts && allNullary = pure $ unnamed (toStringTag sumSchema)
829 | otherwise = (unnamed . fst) <$> runWriterT declareSumSchema
820 | otherwise = (unnamed . fst) <$> runWriterT declareSumSchema
@@ -832,29 +823,29 @@ gdeclareNamedSumSchema opts proxy s
832 (sumSchema, All allNullary) = undeclare (runWriterT declareSumSchema)
823 (sumSchema, All allNullary) = undeclare (runWriterT declareSumSchema)
834 toStringTag schema = mempty
825 toStringTag schema = mempty
835− & type_ ?~ SwaggerString
826+ & type_ .~ SwaggerString
836 & enum_ ?~ map toJSON (schema ^.. properties.ifolded.asIndex)
827 & enum_ ?~ map toJSON (schema ^.. properties.ifolded.asIndex)
838type AllNullary = All
829type AllNullary = All
840class GSumToSchema (f :: * -> *) where
831class GSumToSchema (f :: * -> *) where
841− gsumToSchema :: SchemaOptions -> Proxy f -> Schema -> WriterT AllNullary (Declare (Definitions Schema)) Schema
832+ gsumToSchema :: SchemaOptions -> proxy f -> Schema -> WriterT AllNullary (Declare (Definitions Schema)) Schema
843instance (GSumToSchema f, GSumToSchema g) => GSumToSchema (f :+: g) where
834instance (GSumToSchema f, GSumToSchema g) => GSumToSchema (f :+: g) where
844 gsumToSchema opts _ = gsumToSchema opts (Proxy :: Proxy f) >=> gsumToSchema opts (Proxy :: Proxy g)
835 gsumToSchema opts _ = gsumToSchema opts (Proxy :: Proxy f) >=> gsumToSchema opts (Proxy :: Proxy g)
846−gsumConToSchemaWith :: forall c f. (GToSchema (C1 c f), Constructor c) =>
837+gsumConToSchemaWith :: forall c f proxy. (GToSchema (C1 c f), Constructor c) =>
847− Referenced Schema -> SchemaOptions -> Proxy (C1 c f) -> Schema -> Schema
838+ Referenced Schema -> SchemaOptions -> proxy (C1 c f) -> Schema -> Schema
848gsumConToSchemaWith ref opts _ schema = schema
839gsumConToSchemaWith ref opts _ schema = schema
849− & type_ ?~ SwaggerObject
840+ & type_ .~ SwaggerObject
850 & properties . at tag ?~ ref
841 & properties . at tag ?~ ref
851 & maxProperties ?~ 1
842 & maxProperties ?~ 1
852 & minProperties ?~ 1
843 & minProperties ?~ 1
854 tag = T.pack (constructorTagModifier opts (conName (Proxy3 :: Proxy3 c f p)))
845 tag = T.pack (constructorTagModifier opts (conName (Proxy3 :: Proxy3 c f p)))
856−gsumConToSchema :: (GToSchema (C1 c f), Constructor c) =>
847+gsumConToSchema :: forall c f proxy. (GToSchema (C1 c f), Constructor c) =>
857− SchemaOptions -> Proxy (C1 c f) -> Schema -> Declare (Definitions Schema) Schema
848+ SchemaOptions -> proxy (C1 c f) -> Schema -> Declare (Definitions Schema) Schema
858gsumConToSchema opts proxy schema = do
849gsumConToSchema opts proxy schema = do
859 ref <- gdeclareSchemaRef opts proxy
850 ref <- gdeclareSchemaRef opts proxy
860 return $ gsumConToSchemaWith ref opts proxy schema
851 return $ gsumConToSchemaWith ref opts proxy schema