# json-spec-openapi
This package provides a way to produce
[`openapi3`](https://hackage.haskell.org/package/openapi3) documentation from a
[`json-spec`](https://hackage.haskell.org/package/json-spec-0.1.0.0)
specification.
## Example
Given this data type:
```haskell
data User = User
{ name :: Text
, lastLogin :: Maybe UTCTime
}
deriving ToSchema via (EncodingSchema User) -- <-- ToSchema instance defined here
instance HasJsonEncodingSpec User where
type EncodingSpec User =
JsonObject
'[ Required "name" JsonString
, Optional "last-login" JsonDateTime
]
toJSONStructure user =
(Field @"name" (name user),
(fmap (Field @"last-login") (lastLogin user),
()))
```
Calling `Data.Aeson.encode (Data.OpenApi3.toSchema (Proxy :: Proxy User))`
will produce the following Schema:
```json
{
"additionalProperties": false,
"properties": {
"last-login": {
"format": "date-time",
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
}
```