-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | json-spec-openapi -- -- This package provides a way to produce openapi3 documentation -- from a json-spec specification. -- --

Example

-- -- Given this data type: -- --
--   data User = User
--     {      name :: Text
--     , lastLogin :: UTCTime
--     }
--     deriving ToSchema via (EncodingSchema User) -- <-- ToSchema instance defined here
--   instance HasJsonEncodingSpec User where
--     type EncodingSpec User =
--       JsonObject
--         '[ '("name", JsonString)
--          , '("last-login", JsonDateTime)
--          ]
--     toJSONStructure user =
--       (Field @"name" (name user),
--       (Field @"last-login" (lastLogin user),
--       ()))
--   
-- -- Calling `Data.Aeson.encode (Data.OpenApi3.toSchema (Proxy :: Proxy -- User))` will produce the following Schema: -- --
--   {
--     "additionalProperties": false,
--     "properties": {
--       "last-login": {
--         "format": "date-time",
--         "type": "string"
--       },
--       "name": {
--         "type": "string"
--       }
--     },
--     "required": [
--       "name",
--       "last-login"
--     ],
--     "type": "object"
--   }
--   
@package json-spec-openapi @version 0.1.0.2 -- | This module provides tools for integrating the type-level JSON -- Specification with the "openapi" package. -- -- You can use toOpenApiSchema as a low-level tool to transform -- json-spec Specifications into openapi3 -- Schemas directly, irrespective of any particular business data -- type. -- -- More likely you will want to use -XDerivingVia along with -- EncodingSchema or DecodingSchema to derive -- ToSchema instances for your data types. -- -- Example, given this data type: -- --
--   data User = User
--     {      name :: Text
--     , lastLogin :: UTCTime
--     }
--     deriving ToSchema via (EncodingSchema User) -- <-- ToSchema instance defined here
--   instance HasJsonEncodingSpec User where
--     type EncodingSpec User =
--       JsonObject
--         '[ '("name", JsonString)
--          , '("last-login", JsonDateTime)
--          ]
--     toJSONStructure user =
--       (Field @"name" (name user),
--       (Field @"last-login" (lastLogin user),
--       ()))
--   
-- -- Calling encode (toSchema (Proxy :: -- Proxy User)) will produce the following Schema: -- --
--   {
--     "additionalProperties": false,
--     "properties": {
--       "last-login": {
--         "format": "date-time",
--         "type": "string"
--       },
--       "name": {
--         "type": "string"
--       }
--     },
--     "required": [
--       "name",
--       "last-login"
--     ],
--     "type": "object"
--   }
--   
-- -- If you needed more control over the content of the schema you might -- also consider doing something like this, e.g. in the case where you -- would like to allow additional properties: -- --
--   data User = User
--     {      name :: Text
--     , lastLogin :: UTCTime
--     }
--   instance HasJsonEncodingSpec User where
--     type EncodingSpec User =
--       JsonObject
--         '[ '("name", JsonString)
--          , '("last-login", JsonDateTime)
--          ]
--     toJSONStructure user =
--       (Field @"name" (name user),
--       (Field @"last-login" (lastLogin user),
--       ()))
--   instance ToSchema User where
--     declareNamedSchema _proxy =
--         pure $
--           NamedSchema
--             Nothing
--             (
--               toOpenApiSchema (EncodingSpec User)
--                 & set
--                     additionalProperties
--                     (Just (AdditionalPropertiesAllowed True))
--             )
--   
module Data.JsonSpec.OpenApi -- | Convert a Specification into an OpenAPI Schema. The type -- class Internal is an internal and opaque implementation detail -- and not something you should have to worry about. It should -- already have an instance for every possible Specification that -- can be constructed. If it does not, then that is a bug. Please report -- it! :-) toOpenApiSchema :: Internal spec => Proxy (spec :: Specification) -> Schema -- | Helper for defining ToSchema instances based on -- HasJsonEncodingSpec using deriving via. -- -- Example: -- --
--   data MyType = ...
--     deriving ToSchema via (EncodingSchema MyType)
--   instance HasJsonEncodingSchema MyType where
--     ...
--   
newtype EncodingSchema a EncodingSchema :: a -> EncodingSchema a [unEncodingSchema] :: EncodingSchema a -> a -- | Helper for defining ToSchema instances based on -- HasJsonDecodingSpec using deriving via. -- -- Example: -- --
--   data MyType = ...
--     deriving ToSchema via (DecodingSchema MyType)
--   instance HasJsonDecodingSchema MyType where
--     ...
--   
newtype DecodingSchema a DecodingSchema :: a -> DecodingSchema a [unDecodingSchema] :: DecodingSchema a -> a instance (Data.Typeable.Internal.Typeable a, Data.JsonSpec.OpenApi.Internal (Data.JsonSpec.Decode.DecodingSpec a)) => Data.OpenApi.Internal.Schema.ToSchema (Data.JsonSpec.OpenApi.DecodingSchema a) instance (Data.Typeable.Internal.Typeable a, Data.JsonSpec.OpenApi.Internal (Data.JsonSpec.Encode.EncodingSpec a)) => Data.OpenApi.Internal.Schema.ToSchema (Data.JsonSpec.OpenApi.EncodingSchema a) instance GHC.TypeLits.KnownSymbol tag => Data.JsonSpec.OpenApi.Internal ('Data.JsonSpec.Spec.JsonTag tag) instance Data.JsonSpec.OpenApi.Internal 'Data.JsonSpec.Spec.JsonString instance (Data.JsonSpec.OpenApi.Internal left, Data.JsonSpec.OpenApi.Internal right) => Data.JsonSpec.OpenApi.Internal ('Data.JsonSpec.Spec.JsonEither left right) instance Data.JsonSpec.OpenApi.Internal 'Data.JsonSpec.Spec.JsonNum instance Data.JsonSpec.OpenApi.Internal 'Data.JsonSpec.Spec.JsonInt instance Data.JsonSpec.OpenApi.Internal ('Data.JsonSpec.Spec.JsonObject '[]) instance (GHC.TypeLits.KnownSymbol key, Data.JsonSpec.OpenApi.Internal spec, Data.JsonSpec.OpenApi.Internal ('Data.JsonSpec.Spec.JsonObject more)) => Data.JsonSpec.OpenApi.Internal ('Data.JsonSpec.Spec.JsonObject ('(key, spec) : more)) instance Data.JsonSpec.OpenApi.Internal spec => Data.JsonSpec.OpenApi.Internal ('Data.JsonSpec.Spec.JsonArray spec) instance Data.JsonSpec.OpenApi.Internal 'Data.JsonSpec.Spec.JsonBool instance Data.JsonSpec.OpenApi.Internal 'Data.JsonSpec.Spec.JsonDateTime