Moduleswagger2-2.8.9Haskell2010
Data.Swagger.Internal.Schema
- 3 types
- 3 classes
- 44 values
- Packageswagger2-2.8.9
- Exports51
- LanguageHaskell2010
- LicenceBSD-3-Clause
- SourceSchema.hs
Convert a type into Schema.
An example type and instance:
{-# LANGUAGE OverloadedStrings #-} -- allows to write Text literals
{-# LANGUAGE OverloadedLists #-} -- allows to write Map and HashMap as lists
import Control.Lens
import Data.Proxy
import Data.Swagger
data Coord = Coord { x :: Double, y :: Double }
instance ToSchema Coord where
declareNamedSchema _ = do
doubleSchema <- declareSchemaRef (Proxy :: Proxy Double)
return $ NamedSchema (Just "Coord") $ mempty
& type_ ?~ SwaggerObject
& properties .~
[ ("x", doubleSchema)
, ("y", doubleSchema)
]
& required .~ [ "x", "y" ]
Instead of manually writing your ToSchema instance you can
use a default generic implementation of declareNamedSchema.
To do that, simply add deriving Generic clause to your datatype
and declare a ToSchema instance for your datatype without
giving definition for declareNamedSchema.
For instance, the previous example can be simplified into this:
{-# LANGUAGE DeriveGeneric #-}
import GHC.Generics (Generic)
data Coord = Coord { x :: Double, y :: Double } deriving Generic
instance ToSchema Coord
Methods
declareNamedSchema :: Proxy a -> Declare (Definitions Schema) NamedSchemaConvert a type into an optionally named schema together with all used definitions. Note that the schema itself is included in definitions only if it is recursive (and thus needs its definition in scope).
Instances61ToSchema, …
ToSchema ObjectDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema IntSetDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema IntegerDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema NaturalDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema StringDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema AllDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema AnyDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema VersionDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema Int16Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema Int32Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema Int64Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema Int8Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema Word16Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema Word32Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema Word64Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema Word8Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema BoolDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema CharDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema DoubleDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema FloatDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema IntDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema WordDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema ScientificDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema TextDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema TextDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema DayDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaFormat
"date"corresponds toyyyy-mm-ddformat.ToSchema NominalDiffTimeDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema UTCTimeDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaExample1 expression toSchema (Proxy :: Proxy UTCTime) ^. formatJust "yyyy-mm-ddThh:MM:ssZ"
ToSchema LocalTimeDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaExample1 expression toSchema (Proxy :: Proxy LocalTime) ^. formatJust "yyyy-mm-ddThh:MM:ss"
ToSchema TimeOfDayDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema ZonedTimeDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaFormat
"date"corresponds toyyyy-mm-ddThh:MM:ss(Z|+hh:MM)format.ToSchema UUIDDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaFor ToJSON instance, see uuid-aeson package.
ToSchema ()Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchemaByteStringError ByteString => ToSchema ByteStringDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchemaByteStringError ByteString => ToSchema ByteStringDefined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema a => ToSchema (First a)Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema a => ToSchema (Last a)Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema a => ToSchema (IntMap a)Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaNOTE: This schema does not account for the uniqueness of keys.
ToSchema a => ToSchema (Set a)Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema a => ToSchema (NonEmpty a)Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema a => ToSchema (Identity a)Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema a => ToSchema (Dual a)Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema a => ToSchema (Product a)Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema a => ToSchema (Sum a)Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema a => ToSchema (Maybe a)Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema a => ToSchema (HashSet a)Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema a => ToSchema (Vector a)Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema a => ToSchema (Vector a)Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema a => ToSchema (Vector a)Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema a => ToSchema (Vector a)Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema a => ToSchema [a]Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaHasResolution a => ToSchema (Fixed a)Defined in swagger2-2.8.9 · Data.Swagger.Internal.Schema(ToJSONKey k, ToSchema k, ToSchema v) => ToSchema (Map k v)Defined in swagger2-2.8.9 · Data.Swagger.Internal.Schema(ToJSONKey k, ToSchema k, ToSchema v) => ToSchema (HashMap k v)Defined in swagger2-2.8.9 · Data.Swagger.Internal.Schema(ToSchema a, ToSchema b) => ToSchema (Either a b)Defined in swagger2-2.8.9 · Data.Swagger.Internal.Schema(ToSchema a, ToSchema b) => ToSchema (a, b)Defined in swagger2-2.8.9 · Data.Swagger.Internal.Schema(ToSchema a, ToSchema b, ToSchema c) => ToSchema (a, b, c)Defined in swagger2-2.8.9 · Data.Swagger.Internal.Schema(ToSchema a, ToSchema b, ToSchema c, ToSchema d) => ToSchema (a, b, c, d)Defined in swagger2-2.8.9 · Data.Swagger.Internal.Schema(ToSchema a, ToSchema b, ToSchema c, ToSchema d, ToSchema e) => ToSchema (a, b, c, d, e)Defined in swagger2-2.8.9 · Data.Swagger.Internal.Schema(ToSchema a, ToSchema b, ToSchema c, ToSchema d, ToSchema e, ToSchema f) => ToSchema (a, b, c, d, e, f)Defined in swagger2-2.8.9 · Data.Swagger.Internal.Schema(ToSchema a, ToSchema b, ToSchema c, ToSchema d, ToSchema e, ToSchema f, ToSchema g) => ToSchema (a, b, c, d, e, f, g)Defined in swagger2-2.8.9 · Data.Swagger.Internal.Schema
Convert a type into a schema and declare all used schema definitions.
Convert a type into an optionally named schema.
toNamedSchema (Proxy :: Proxy String) ^. nameNothingencode (toNamedSchema (Proxy :: Proxy String) ^. schema)"{\"type\":\"string\"}"
toNamedSchema (Proxy :: Proxy Day) ^. nameJust "Day"encode (toNamedSchema (Proxy :: Proxy Day) ^. schema)"{\"example\":\"2016-07-22\",\"format\":\"date\",\"type\":\"string\"}"
Get type's schema name according to its ToSchema instance.
schemaName (Proxy :: Proxy Int)Nothing
schemaName (Proxy :: Proxy UTCTime)Just "UTCTime"
Convert a type into a schema.
encode $ toSchema (Proxy :: Proxy Int8)"{\"maximum\":127,\"minimum\":-128,\"type\":\"integer\"}"
encode $ toSchema (Proxy :: Proxy [Day])"{\"items\":{\"$ref\":\"#/definitions/Day\"},\"type\":\"array\"}"
Convert a type into a referenced schema if possible. Only named schemas can be referenced, nameless schemas are inlined.
encode $ toSchemaRef (Proxy :: Proxy Integer)"{\"type\":\"integer\"}"
encode $ toSchemaRef (Proxy :: Proxy Day)"{\"$ref\":\"#/definitions/Day\"}"
Convert a type into a referenced schema if possible and declare all used schema definitions. Only named schemas can be referenced, nameless schemas are inlined.
Schema definitions are typically declared for every referenced schema.
If declareSchemaRef returns a reference, a corresponding schema
will be declared (regardless of whether it is recusive or not).
Inline any referenced schema if its name satisfies given predicate.
NOTE: if a referenced schema is not found in definitions the predicate is ignored and schema stays referenced.
WARNING: inlineSchemasWhen will produce infinite schemas
when inlining recursive schemas.
Inline any referenced schema if its name is in the given list.
NOTE: if a referenced schema is not found in definitions it stays referenced even if it appears in the list of names.
WARNING: inlineSchemas will produce infinite schemas
when inlining recursive schemas.
Inline all schema references for which the definition
can be found in Definitions.
WARNING: inlineAllSchemas will produce infinite schemas
when inlining recursive schemas.
Convert a type into a schema without references.
encode $ toInlinedSchema (Proxy :: Proxy [Day])"{\"items\":{\"example\":\"2016-07-22\",\"format\":\"date\",\"type\":\"string\"},\"type\":\"array\"}"
WARNING: toInlinedSchema will produce infinite schema
when inlining recursive schemas.
Inline all non-recursive schemas for which the definition
can be found in Definitions.
Default schema for binary data (any sequence of octets).
Default schema for binary data (base64 encoded).
Default schema for password string.
"password" format is used to hint UIs the input needs to be obscured.
Make an unrestrictive sketch of a Schema based on a ToJSON instance.
Produced schema can be used for further refinement.
encode $ sketchSchema "hello""{\"example\":\"hello\",\"type\":\"string\"}"
encode $ sketchSchema (1, 2, 3)"{\"example\":[1,2,3],\"items\":{\"type\":\"number\"},\"type\":\"array\"}"
encode $ sketchSchema ("Jack", 25)"{\"example\":[\"Jack\",25],\"items\":[{\"type\":\"string\"},{\"type\":\"number\"}],\"type\":\"array\"}"
data Person = Person { name :: String, age :: Int } deriving (Generic)instance ToJSON Person
Make a restrictive sketch of a Schema based on a ToJSON instance.
Produced schema uses as much constraints as possible.
encode $ sketchStrictSchema "hello""{\"enum\":[\"hello\"],\"maxLength\":5,\"minLength\":5,\"pattern\":\"hello\",\"type\":\"string\"}"
encode $ sketchStrictSchema (1, 2, 3)"{\"enum\":[[1,2,3]],\"items\":[{\"enum\":[1],\"maximum\":1,\"minimum\":1,\"multipleOf\":1,\"type\":\"number\"},{\"enum\":[2],\"maximum\":2,\"minimum\":2,\"multipleOf\":2,\"type\":\"number\"},{\"enum\":[3],\"maximum\":3,\"minimum\":3,\"multipleOf\":3,\"type\":\"number\"}],\"maxItems\":3,\"minItems\":3,\"type\":\"array\",\"uniqueItems\":true}"
encode $ sketchStrictSchema ("Jack", 25)"{\"enum\":[[\"Jack\",25]],\"items\":[{\"enum\":[\"Jack\"],\"maxLength\":4,\"minLength\":4,\"pattern\":\"Jack\",\"type\":\"string\"},{\"enum\":[25],\"maximum\":25,\"minimum\":25,\"multipleOf\":25,\"type\":\"number\"}],\"maxItems\":2,\"minItems\":2,\"type\":\"array\",\"uniqueItems\":true}"
data Person = Person { name :: String, age :: Int } deriving (Generic)instance ToJSON Person
Methods
gdeclareNamedSchema :: SchemaOptions -> Proxy f -> Schema -> Declare (Definitions Schema) NamedSchema
Instances10GToSchema, …
Constructor c => GToSchema (C1 c U1)Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaGToSchema f => GToSchema (C1 c f)Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema c => GToSchema (K1 i (Maybe c))Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaToSchema c => GToSchema (K1 i c)Defined in swagger2-2.8.9 · Data.Swagger.Internal.Schema(Datatype d, GToSchema f) => GToSchema (D1 d f)Defined in swagger2-2.8.9 · Data.Swagger.Internal.Schema(Selector s, GToSchema f) => GToSchema (S1 s f)Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaRecord fields.
(Selector s, GToSchema f, GToSchema (S1 s f)) => GToSchema (C1 c (S1 s f))Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaSingle field constructor.
(Selector s, ToSchema c) => GToSchema (S1 s (K1 i (Maybe c)))Defined in swagger2-2.8.9 · Data.Swagger.Internal.SchemaOptional record fields.
(GSumToSchema f, GSumToSchema g) => GToSchema (f :+: g)Defined in swagger2-2.8.9 · Data.Swagger.Internal.Schema(GToSchema f, GToSchema g) => GToSchema (f :*: g)Defined in swagger2-2.8.9 · Data.Swagger.Internal.Schema
Equations
genericDeclareNamedSchemaNewtype :: (Generic a, Datatype d, Rep a ~ D1 d (C1 c (S1 s (K1 i inner))))=> SchemaOptionsHow to derive the name.
-> (Proxy inner -> Declare (Definitions Schema) Schema)How to create a schema for the wrapped type.
-> Proxy a-> Declare (Definitions Schema) NamedSchema
Declare a named schema for a newtype wrapper.
Declare Schema for a mapping with Bounded Enum keys. This makes a much more useful schema when there aren't many options for key values.
data ButtonState = Neutral | Focus | Active | Hover | Disabled deriving (Show, Bounded, Enum, Generic)instance ToJSON ButtonStateinstance ToSchema ButtonStateinstance ToJSONKey ButtonState where toJSONKey = toJSONKeyText (T.pack . show)type ImageUrl = T.Textencode $ toSchemaBoundedEnumKeyMapping (Proxy :: Proxy (Map ButtonState ImageUrl))"{\"properties\":{\"Neutral\":{\"type\":\"string\"},\"Focus\":{\"type\":\"string\"},\"Active\":{\"type\":\"string\"},\"Hover\":{\"type\":\"string\"},\"Disabled\":{\"type\":\"string\"}},\"type\":\"object\"}"
Note: this is only useful when key is encoded with ToJSONKeyText.
If it is encoded with ToJSONKeyValue then a regular schema for [(key, value)] is used.
A Schema for a mapping with Bounded Enum keys. This makes a much more useful schema when there aren't many options for key values.
data ButtonState = Neutral | Focus | Active | Hover | Disabled deriving (Show, Bounded, Enum, Generic)instance ToJSON ButtonStateinstance ToSchema ButtonStateinstance ToJSONKey ButtonState where toJSONKey = toJSONKeyText (T.pack . show)type ImageUrl = T.Textencode $ toSchemaBoundedEnumKeyMapping (Proxy :: Proxy (Map ButtonState ImageUrl))"{\"properties\":{\"Neutral\":{\"type\":\"string\"},\"Focus\":{\"type\":\"string\"},\"Active\":{\"type\":\"string\"},\"Hover\":{\"type\":\"string\"},\"Disabled\":{\"type\":\"string\"}},\"type\":\"object\"}"
Note: this is only useful when key is encoded with ToJSONKeyText.
If it is encoded with ToJSONKeyValue then a regular schema for [(key, value)] is used.
A configurable generic Schema creator.
A configurable generic NamedSchema creator.
This function applied to defaultSchemaOptions
is used as the default for declareNamedSchema
when the type is an instance of Generic.
A configurable generic Schema creator.
Unlike genericDeclareSchema also works for mixed sum types. Use with care since some Swagger tools do not support well schemas for mixed sum types.
A configurable generic NamedSchema creator.
Unlike genericDeclareNamedSchema also works for mixed sum types. Use with care since some Swagger tools do not support well schemas for mixed sum types.
Lift a plain ParamSchema into a model NamedSchema.
Lift a plain ParamSchema into a model Schema.
Methods
gsumToSchema :: SchemaOptions -> Proxy f -> Schema -> WriterT AllNullary (Declare (Definitions Schema)) Schema
Instances4GSumToSchema
Constructor c => GSumToSchema (C1 c U1)Defined in swagger2-2.8.9 · Data.Swagger.Internal.Schema(Constructor c, Selector s, GToSchema f) => GSumToSchema (C1 c (S1 s f))Defined in swagger2-2.8.9 · Data.Swagger.Internal.Schema(Constructor c, GToSchema f) => GSumToSchema (C1 c f)Defined in swagger2-2.8.9 · Data.Swagger.Internal.Schema(GSumToSchema f, GSumToSchema g) => GSumToSchema (f :+: g)Defined in swagger2-2.8.9 · Data.Swagger.Internal.Schema
import Data.Swaggerimport Data.Aeson (encode)import Data.Aeson.Types (toJSONKeyText)