@@ -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,7 +528,7 @@ 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 ?~ AdditionalPropertiesSchema 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
@@ -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))
@@ -558,7 +554,7 @@ instance ToSchema a => ToSchema (HashMap TL.Text a) where declareNamedSchema _ =
559instance OVERLAPPING_ ToSchema Object where
555instance OVERLAPPING_ ToSchema Object where
560 declareNamedSchema _ = pure $ NamedSchema (Just "Object") $ mempty
556 declareNamedSchema _ = pure $ NamedSchema (Just "Object") $ mempty
561− & type_ ?~ SwaggerObject
557+ & type_ .~ SwaggerObject
562 & description ?~ "Arbitrary JSON object."
558 & description ?~ "Arbitrary JSON object."
563 & additionalProperties ?~ AdditionalPropertiesAllowed True
559 & additionalProperties ?~ AdditionalPropertiesAllowed True
@@ -597,26 +593,26 @@ instance ToSchema a => ToSchema (Identity a) where declareNamedSchema _ = declar
598-- >>> encode $ toSchemaBoundedIntegral (Proxy :: Proxy Int16)
594-- >>> encode $ toSchemaBoundedIntegral (Proxy :: Proxy Int16)
599-- "{\"maximum\":32767,\"minimum\":-32768,\"type\":\"integer\"}"
595-- "{\"maximum\":32767,\"minimum\":-32768,\"type\":\"integer\"}"
600−toSchemaBoundedIntegral :: forall a. (Bounded a, Integral a) => Proxy a -> Schema
596+toSchemaBoundedIntegral :: forall a proxy. (Bounded a, Integral a) => proxy a -> Schema
601toSchemaBoundedIntegral _ = mempty
597toSchemaBoundedIntegral _ = mempty
602− & type_ ?~ SwaggerInteger
598+ & type_ .~ SwaggerInteger
603 & minimum_ ?~ fromInteger (toInteger (minBound :: a))
599 & minimum_ ?~ fromInteger (toInteger (minBound :: a))
604 & maximum_ ?~ fromInteger (toInteger (maxBound :: a))
600 & maximum_ ?~ fromInteger (toInteger (maxBound :: a))
606-- | Default generic named schema for @'Bounded'@, @'Integral'@ types.
602-- | Default generic named schema for @'Bounded'@, @'Integral'@ types.
607−genericToNamedSchemaBoundedIntegral :: forall a d f.
603+genericToNamedSchemaBoundedIntegral :: forall a d f proxy.
608 ( Bounded a, Integral a
604 ( Bounded a, Integral a
609 , Generic a, Rep a ~ D1 d f, Datatype d)
605 , Generic a, Rep a ~ D1 d f, Datatype d)
610− => SchemaOptions -> Proxy a -> NamedSchema
606+ => SchemaOptions -> proxy a -> NamedSchema
611genericToNamedSchemaBoundedIntegral opts proxy
607genericToNamedSchemaBoundedIntegral opts proxy
612 = genericNameSchema opts proxy (toSchemaBoundedIntegral proxy)
608 = genericNameSchema opts proxy (toSchemaBoundedIntegral proxy)
614-- | Declare a named schema for a @newtype@ wrapper.
610-- | Declare a named schema for a @newtype@ wrapper.
615−genericDeclareNamedSchemaNewtype :: forall a d c s i inner.
611+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))))
612 (Generic a, Datatype d, Rep a ~ D1 d (C1 c (S1 s (K1 i inner))))
617 => SchemaOptions -- ^ How to derive the name.
613 => SchemaOptions -- ^ How to derive the name.
618 -> (Proxy inner -> Declare (Definitions Schema) Schema) -- ^ How to create a schema for the wrapped type.
614 -> (Proxy inner -> Declare (Definitions Schema) Schema) -- ^ How to create a schema for the wrapped type.
619− -> Proxy a
615+ -> proxy a
620 -> Declare (Definitions Schema) NamedSchema
616 -> Declare (Definitions Schema) NamedSchema
621genericDeclareNamedSchemaNewtype opts f proxy = genericNameSchema opts proxy <$> f (Proxy :: Proxy inner)
617genericDeclareNamedSchemaNewtype opts f proxy = genericNameSchema opts proxy <$> f (Proxy :: Proxy inner)
@@ -633,9 +629,9 @@ genericDeclareNamedSchemaNewtype opts f proxy = genericNameSchema opts proxy <$>
634-- Note: this is only useful when @key@ is encoded with 'ToJSONKeyText'.
630-- 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.
631-- If it is encoded with 'ToJSONKeyValue' then a regular schema for @[(key, value)]@ is used.
636−declareSchemaBoundedEnumKeyMapping :: forall map key value.
632+declareSchemaBoundedEnumKeyMapping :: forall map key value proxy.
637 (Bounded key, Enum key, ToJSONKey key, ToSchema key, ToSchema value)
633 (Bounded key, Enum key, ToJSONKey key, ToSchema key, ToSchema value)
638− => Proxy (map key value) -> Declare (Definitions Schema) Schema
634+ => proxy (map key value) -> Declare (Definitions Schema) Schema
639declareSchemaBoundedEnumKeyMapping _ = case toJSONKey :: ToJSONKeyFunction key of
635declareSchemaBoundedEnumKeyMapping _ = case toJSONKey :: ToJSONKeyFunction key of
640 ToJSONKeyText keyToText _ -> objectSchema keyToText
636 ToJSONKeyText keyToText _ -> objectSchema keyToText
641 ToJSONKeyValue _ _ -> declareSchema (Proxy :: Proxy [(key, value)])
637 ToJSONKeyValue _ _ -> declareSchema (Proxy :: Proxy [(key, value)])
@@ -645,7 +641,7 @@ declareSchemaBoundedEnumKeyMapping _ = case toJSONKey :: ToJSONKeyFunction key o
645 let allKeys = [minBound..maxBound :: key]
641 let allKeys = [minBound..maxBound :: key]
646 mkPair k = (keyToText k, valueRef)
642 mkPair k = (keyToText k, valueRef)
647 return $ mempty
643 return $ mempty
648− & type_ ?~ SwaggerObject
644+ & type_ .~ SwaggerObject
649 & properties .~ InsOrdHashMap.fromList (map mkPair allKeys)
645 & properties .~ InsOrdHashMap.fromList (map mkPair allKeys)
651-- | A 'Schema' for a mapping with 'Bounded' 'Enum' keys.
647-- | A 'Schema' for a mapping with 'Bounded' 'Enum' keys.
@@ -661,46 +657,46 @@ declareSchemaBoundedEnumKeyMapping _ = case toJSONKey :: ToJSONKeyFunction key o
662-- Note: this is only useful when @key@ is encoded with 'ToJSONKeyText'.
658-- 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.
659-- If it is encoded with 'ToJSONKeyValue' then a regular schema for @[(key, value)]@ is used.
664−toSchemaBoundedEnumKeyMapping :: forall map key value.
660+toSchemaBoundedEnumKeyMapping :: forall map key value proxy.
665 (Bounded key, Enum key, ToJSONKey key, ToSchema key, ToSchema value)
661 (Bounded key, Enum key, ToJSONKey key, ToSchema key, ToSchema value)
666− => Proxy (map key value) -> Schema
662+ => proxy (map key value) -> Schema
667toSchemaBoundedEnumKeyMapping = flip evalDeclare mempty . declareSchemaBoundedEnumKeyMapping
663toSchemaBoundedEnumKeyMapping = flip evalDeclare mempty . declareSchemaBoundedEnumKeyMapping
669-- | A configurable generic @'Schema'@ creator.
665-- | A configurable generic @'Schema'@ creator.
670genericDeclareSchema :: (Generic a, GToSchema (Rep a), TypeHasSimpleShape a "genericDeclareSchemaUnrestricted") =>
666genericDeclareSchema :: (Generic a, GToSchema (Rep a), TypeHasSimpleShape a "genericDeclareSchemaUnrestricted") =>
671− SchemaOptions -> Proxy a -> Declare (Definitions Schema) Schema
667+ SchemaOptions -> proxy a -> Declare (Definitions Schema) Schema
672genericDeclareSchema = genericDeclareSchemaUnrestricted
668genericDeclareSchema = genericDeclareSchemaUnrestricted
674-- | A configurable generic @'NamedSchema'@ creator.
670-- | A configurable generic @'NamedSchema'@ creator.
675-- This function applied to @'defaultSchemaOptions'@
671-- This function applied to @'defaultSchemaOptions'@
676-- is used as the default for @'declareNamedSchema'@
672-- is used as the default for @'declareNamedSchema'@
677-- when the type is an instance of @'Generic'@.
673-- when the type is an instance of @'Generic'@.
678−genericDeclareNamedSchema :: (Generic a, GToSchema (Rep a), TypeHasSimpleShape a "genericDeclareNamedSchemaUnrestricted") =>
674+genericDeclareNamedSchema :: forall a proxy. (Generic a, GToSchema (Rep a), TypeHasSimpleShape a "genericDeclareNamedSchemaUnrestricted") =>
679− SchemaOptions -> Proxy a -> Declare (Definitions Schema) NamedSchema
675+ SchemaOptions -> proxy a -> Declare (Definitions Schema) NamedSchema
680genericDeclareNamedSchema = genericDeclareNamedSchemaUnrestricted
676genericDeclareNamedSchema = genericDeclareNamedSchemaUnrestricted
682-- | A configurable generic @'Schema'@ creator.
678-- | A configurable generic @'Schema'@ creator.
684-- Unlike 'genericDeclareSchema' also works for mixed sum types.
680-- 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.
681-- 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
682+genericDeclareSchemaUnrestricted :: (Generic a, GToSchema (Rep a)) => SchemaOptions -> proxy a -> Declare (Definitions Schema) Schema
687genericDeclareSchemaUnrestricted opts proxy = _namedSchemaSchema <$> genericDeclareNamedSchemaUnrestricted opts proxy
683genericDeclareSchemaUnrestricted opts proxy = _namedSchemaSchema <$> genericDeclareNamedSchemaUnrestricted opts proxy
689-- | A configurable generic @'NamedSchema'@ creator.
685-- | A configurable generic @'NamedSchema'@ creator.
691-- Unlike 'genericDeclareNamedSchema' also works for mixed sum types.
687-- 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.
688-- 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)) =>
689+genericDeclareNamedSchemaUnrestricted :: forall a proxy. (Generic a, GToSchema (Rep a)) =>
694− SchemaOptions -> Proxy a -> Declare (Definitions Schema) NamedSchema
690+ SchemaOptions -> proxy a -> Declare (Definitions Schema) NamedSchema
695genericDeclareNamedSchemaUnrestricted opts _ = gdeclareNamedSchema opts (Proxy :: Proxy (Rep a)) mempty
691genericDeclareNamedSchemaUnrestricted opts _ = gdeclareNamedSchema opts (Proxy :: Proxy (Rep a)) mempty
697-- | Derive a 'Generic'-based name for a datatype and assign it to a given 'Schema'.
693-- | Derive a 'Generic'-based name for a datatype and assign it to a given 'Schema'.
698−genericNameSchema :: forall a d f.
694+genericNameSchema :: forall a d f proxy.
699 (Generic a, Rep a ~ D1 d f, Datatype d)
695 (Generic a, Rep a ~ D1 d f, Datatype d)
700− => SchemaOptions -> Proxy a -> Schema -> NamedSchema
696+ => SchemaOptions -> proxy a -> Schema -> NamedSchema
701genericNameSchema opts _ = NamedSchema (gdatatypeSchemaName opts (Proxy :: Proxy d))
697genericNameSchema opts _ = NamedSchema (gdatatypeSchemaName opts (Proxy :: Proxy d))
703−gdatatypeSchemaName :: forall d. Datatype d => SchemaOptions -> Proxy d -> Maybe T.Text
699+gdatatypeSchemaName :: forall proxy d. Datatype d => SchemaOptions -> proxy d -> Maybe T.Text
704gdatatypeSchemaName opts _ = case orig of
700gdatatypeSchemaName opts _ = case orig of
705 (c:_) | isAlpha c && isUpper c -> Just (T.pack name)
701 (c:_) | isAlpha c && isUpper c -> Just (T.pack name)
706 _ -> Nothing
702 _ -> Nothing
@@ -709,23 +705,24 @@ gdatatypeSchemaName opts _ = case orig of
709 name = datatypeNameModifier opts orig
705 name = datatypeNameModifier opts orig
711-- | Lift a plain @'ParamSchema'@ into a model @'NamedSchema'@.
707-- | Lift a plain @'ParamSchema'@ into a model @'NamedSchema'@.
708+paramSchemaToNamedSchema :: forall a d f proxy.
712−paramSchemaToNamedSchema :: (ToParamSchema a, Generic a, Rep a ~ D1 d f, Datatype d) =>
709+ (ToParamSchema a, Generic a, Rep a ~ D1 d f, Datatype d)
713− SchemaOptions -> Proxy a -> NamedSchema
710+ => SchemaOptions -> proxy a -> NamedSchema
714paramSchemaToNamedSchema opts proxy = genericNameSchema opts proxy (paramSchemaToSchema proxy)
711paramSchemaToNamedSchema opts proxy = genericNameSchema opts proxy (paramSchemaToSchema proxy)
716-- | Lift a plain @'ParamSchema'@ into a model @'Schema'@.
713-- | Lift a plain @'ParamSchema'@ into a model @'Schema'@.
717−paramSchemaToSchema :: ToParamSchema a => Proxy a -> Schema
714+paramSchemaToSchema :: forall a proxy. ToParamSchema a => proxy a -> Schema
718−paramSchemaToSchema proxy = mempty & paramSchema .~ toParamSchema proxy
715+paramSchemaToSchema _ = mempty & paramSchema .~ toParamSchema (Proxy :: Proxy a)
720nullarySchema :: Schema
717nullarySchema :: Schema
721nullarySchema = mempty
718nullarySchema = mempty
722− & type_ ?~ SwaggerArray
719+ & type_ .~ SwaggerArray
723 & items ?~ SwaggerItemsArray []
720 & items ?~ SwaggerItemsArray []
725−gtoNamedSchema :: GToSchema f => SchemaOptions -> Proxy f -> NamedSchema
722+gtoNamedSchema :: GToSchema f => SchemaOptions -> proxy f -> NamedSchema
726gtoNamedSchema opts proxy = undeclare $ gdeclareNamedSchema opts proxy mempty
723gtoNamedSchema opts proxy = undeclare $ gdeclareNamedSchema opts proxy mempty
728−gdeclareSchema :: GToSchema f => SchemaOptions -> Proxy f -> Declare (Definitions Schema) Schema
725+gdeclareSchema :: GToSchema f => SchemaOptions -> proxy f -> Declare (Definitions Schema) Schema
729gdeclareSchema opts proxy = _namedSchemaSchema <$> gdeclareNamedSchema opts proxy mempty
726gdeclareSchema opts proxy = _namedSchemaSchema <$> gdeclareNamedSchema opts proxy mempty
731instance (GToSchema f, GToSchema g) => GToSchema (f :*: g) where
728instance (GToSchema f, GToSchema g) => GToSchema (f :*: g) where
@@ -759,7 +756,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
756 recordSchema = gdeclareNamedSchema opts (Proxy :: Proxy (S1 s f)) s
760 fieldSchema = gdeclareNamedSchema opts (Proxy :: Proxy f) s
757 fieldSchema = gdeclareNamedSchema opts (Proxy :: Proxy f) s
762−gdeclareSchemaRef :: GToSchema a => SchemaOptions -> Proxy a -> Declare (Definitions Schema) (Referenced Schema)
759+gdeclareSchemaRef :: GToSchema a => SchemaOptions -> proxy a -> Declare (Definitions Schema) (Referenced Schema)
763gdeclareSchemaRef opts proxy = do
760gdeclareSchemaRef opts proxy = do
764 case gtoNamedSchema opts proxy of
761 case gtoNamedSchema opts proxy of
765 NamedSchema (Just name) schema -> do
762 NamedSchema (Just name) schema -> do
@@ -790,12 +787,12 @@ withFieldSchema opts _ isRequiredField schema = do
791 if T.null fname
788 if T.null fname
792 then schema
789 then schema
793− & type_ ?~ SwaggerArray
790+ & type_ .~ SwaggerArray
794 & items %~ appendItem ref
791 & items %~ appendItem ref
795 & maxItems %~ Just . maybe 1 (+1) -- increment maxItems
792 & maxItems %~ Just . maybe 1 (+1) -- increment maxItems
796 & minItems %~ Just . maybe 1 (+1) -- increment minItems
793 & minItems %~ Just . maybe 1 (+1) -- increment minItems
797 else schema
794 else schema
798− & type_ ?~ SwaggerObject
795+ & type_ .~ SwaggerObject
799 & properties . at fname ?~ ref
796 & properties . at fname ?~ ref
800 & if isRequiredField
797 & if isRequiredField
801 then required %~ (++ [fname])
798 then required %~ (++ [fname])
@@ -823,7 +820,7 @@ instance ( GSumToSchema f
824 gdeclareNamedSchema = gdeclareNamedSumSchema
821 gdeclareNamedSchema = gdeclareNamedSumSchema
826−gdeclareNamedSumSchema :: GSumToSchema f => SchemaOptions -> Proxy f -> Schema -> Declare (Definitions Schema) NamedSchema
823+gdeclareNamedSumSchema :: GSumToSchema f => SchemaOptions -> proxy f -> Schema -> Declare (Definitions Schema) NamedSchema
827gdeclareNamedSumSchema opts proxy s
824gdeclareNamedSumSchema opts proxy s
828 | allNullaryToStringTag opts && allNullary = pure $ unnamed (toStringTag sumSchema)
825 | allNullaryToStringTag opts && allNullary = pure $ unnamed (toStringTag sumSchema)
829 | otherwise = (unnamed . fst) <$> runWriterT declareSumSchema
826 | otherwise = (unnamed . fst) <$> runWriterT declareSumSchema
@@ -832,29 +829,29 @@ gdeclareNamedSumSchema opts proxy s
832 (sumSchema, All allNullary) = undeclare (runWriterT declareSumSchema)
829 (sumSchema, All allNullary) = undeclare (runWriterT declareSumSchema)
834 toStringTag schema = mempty
831 toStringTag schema = mempty
835− & type_ ?~ SwaggerString
832+ & type_ .~ SwaggerString
836 & enum_ ?~ map toJSON (schema ^.. properties.ifolded.asIndex)
833 & enum_ ?~ map toJSON (schema ^.. properties.ifolded.asIndex)
838type AllNullary = All
835type AllNullary = All
840class GSumToSchema (f :: * -> *) where
837class GSumToSchema (f :: * -> *) where
841− gsumToSchema :: SchemaOptions -> Proxy f -> Schema -> WriterT AllNullary (Declare (Definitions Schema)) Schema
838+ gsumToSchema :: SchemaOptions -> proxy f -> Schema -> WriterT AllNullary (Declare (Definitions Schema)) Schema
843instance (GSumToSchema f, GSumToSchema g) => GSumToSchema (f :+: g) where
840instance (GSumToSchema f, GSumToSchema g) => GSumToSchema (f :+: g) where
844 gsumToSchema opts _ = gsumToSchema opts (Proxy :: Proxy f) >=> gsumToSchema opts (Proxy :: Proxy g)
841 gsumToSchema opts _ = gsumToSchema opts (Proxy :: Proxy f) >=> gsumToSchema opts (Proxy :: Proxy g)
846−gsumConToSchemaWith :: forall c f. (GToSchema (C1 c f), Constructor c) =>
843+gsumConToSchemaWith :: forall c f proxy. (GToSchema (C1 c f), Constructor c) =>
847− Referenced Schema -> SchemaOptions -> Proxy (C1 c f) -> Schema -> Schema
844+ Referenced Schema -> SchemaOptions -> proxy (C1 c f) -> Schema -> Schema
848gsumConToSchemaWith ref opts _ schema = schema
845gsumConToSchemaWith ref opts _ schema = schema
849− & type_ ?~ SwaggerObject
846+ & type_ .~ SwaggerObject
850 & properties . at tag ?~ ref
847 & properties . at tag ?~ ref
851 & maxProperties ?~ 1
848 & maxProperties ?~ 1
852 & minProperties ?~ 1
849 & minProperties ?~ 1
854 tag = T.pack (constructorTagModifier opts (conName (Proxy3 :: Proxy3 c f p)))
851 tag = T.pack (constructorTagModifier opts (conName (Proxy3 :: Proxy3 c f p)))
856−gsumConToSchema :: (GToSchema (C1 c f), Constructor c) =>
853+gsumConToSchema :: forall c f proxy. (GToSchema (C1 c f), Constructor c) =>
857− SchemaOptions -> Proxy (C1 c f) -> Schema -> Declare (Definitions Schema) Schema
854+ SchemaOptions -> proxy (C1 c f) -> Schema -> Declare (Definitions Schema) Schema
858gsumConToSchema opts proxy schema = do
855gsumConToSchema opts proxy schema = do
859 ref <- gdeclareSchemaRef opts proxy
856 ref <- gdeclareSchemaRef opts proxy
860 return $ gsumConToSchemaWith ref opts proxy schema
857 return $ gsumConToSchemaWith ref opts proxy schema