@@ -89,7 +89,7 @@ data Swagger = Swagger
8989 , swaggerTags :: [SwaggerTag]
9090
9191 -- | Additional external documentation.
92− , swaggerExternalDocs :: SwaggerExternalDocs
92+ , swaggerExternalDocs :: Maybe SwaggerExternalDocs
9393 } deriving (Eq, Show, Generic)
9494
9595-- | The object provides metadata about the API.
@@ -748,7 +748,6 @@ instance SwaggerMonoid SwaggerParameterSchema where
748748
749749deriveJSON (jsonPrefix "SwaggerParameter") ''SwaggerParameterLocation
750750deriveJSON (jsonPrefix "SwaggerParam") ''SwaggerParameterType
751−deriveJSON' ''SwaggerPathItem
752751deriveJSON' ''SwaggerInfo
753752deriveJSON' ''SwaggerContact
754753deriveJSON' ''SwaggerLicense
@@ -766,6 +765,7 @@ deriveJSON' ''SwaggerXml
766765
767766deriveToJSON' ''SwaggerOperation
768767deriveToJSON' ''SwaggerResponse
768+deriveToJSON' ''SwaggerPathItem
769769
770770-- =======================================================================
771771-- Manual ToJSON instances
@@ -883,7 +883,16 @@ instance FromJSON Swagger where
883883 parseJSON json@(Object o) = do
884884 (version :: Text) <- o .: "swagger"
885885 when (version /= "2.0") empty
886− genericParseJSON (jsonPrefix "swagger") json
886+ (genericParseJSON (jsonPrefix "swagger")
887+ `withDefaults` [ "consumes" .= (mempty :: SwaggerMimeList)
888+ , "produces" .= (mempty :: SwaggerMimeList)
889+ , "security" .= ([] :: [SwaggerSecurityRequirement])
890+ , "tags" .= ([] :: [SwaggerTag])
891+ , "definitions" .= (mempty :: HashMap Text SwaggerSchema)
892+ , "parameters" .= (mempty :: HashMap Text SwaggerParameter)
893+ , "responses" .= (mempty :: HashMap Text SwaggerResponse)
894+ , "securityDefinitions" .= (mempty :: HashMap Text SwaggerSecurityScheme)
895+ ] ) json
887896 parseJSON _ = empty
888897
889898instance FromJSON SwaggerSecurityScheme where
@@ -954,5 +963,10 @@ instance FromJSON SwaggerResponse where
954963
955964instance FromJSON SwaggerOperation where
956965 parseJSON = genericParseJSON (jsonPrefix "swaggerOperation")
957− `withDefaults` [ "deprecated" .= False ]
966+ `withDefaults` [ "deprecated" .= False
967+ , "security" .= ([] :: [SwaggerSecurityRequirement]) ]
968+
969+instance FromJSON SwaggerPathItem where
970+ parseJSON = genericParseJSON (jsonPrefix "swaggerPathItem")
971+ `withDefaults` [ "parameters" .= ([] :: [SwaggerParameter]) ]
958972