git.iko.soy/typeable/swagger2
on master help sign in
Tune nullary schema implementation
24c08faOleg Grenrus
src/Data/Swagger/Internal.hs+17−3
@@ -66,6 +66,7 @@ import Data.Swagger.Internal.AesonUtils (sopSwaggerGenericToEncoding)
66#endif
66#endif
67
67
68-- $setup
68-- $setup
69+-- >>> :seti -XDataKinds
69-- >>> import Data.Aeson
70-- >>> import Data.Aeson
70
71
71-- | A list of definitions that can be used in references.
72-- | A list of definitions that can be used in references.
@@ -1067,7 +1068,8 @@ instance ToJSON (ParamSchema t) => ToJSON (SwaggerItems t) where
1067 toJSON (SwaggerItemsArray []) = object
1068 toJSON (SwaggerItemsArray []) = object
1068 [ "items" .= object []
1069 [ "items" .= object []
1069 , "maxItems" .= (0 :: Int)
1070 , "maxItems" .= (0 :: Int)
1070− , "example" .= ([] :: [()]) ]
1071+ , "example" .= Array mempty
1072+ ]
1071 toJSON (SwaggerItemsArray x) = object [ "items" .= x ]
1073 toJSON (SwaggerItemsArray x) = object [ "items" .= x ]
1072
1074
1073instance ToJSON Host where
1075instance ToJSON Host where
@@ -1205,9 +1207,21 @@ instance FromJSON (SwaggerItems 'SwaggerKindParamOtherSchema) where
1205 <$> o .:? "collectionFormat"
1207 <$> o .:? "collectionFormat"
1206 <*> ((o .: "items" >>= parseJSON) <|> fail ("foo" ++ show o))
1208 <*> ((o .: "items" >>= parseJSON) <|> fail ("foo" ++ show o))
1207
1209
1210+-- |
1211+--
1212+-- >>> decode "{}" :: Maybe (SwaggerItems 'SwaggerKindSchema)
1213+-- Just (SwaggerItemsArray [])
1214+--
1215+-- >>> eitherDecode "{\"$ref\":\"#/definitions/example\"}" :: Either String (SwaggerItems 'SwaggerKindSchema)
1216+-- Right (SwaggerItemsObject (Ref (Reference {getReference = "example"})))
1217+--
1218+-- >>> eitherDecode "[{\"$ref\":\"#/definitions/example\"}]" :: Either String (SwaggerItems 'SwaggerKindSchema)
1219+-- Right (SwaggerItemsArray [Ref (Reference {getReference = "example"})])
1220+--
1208instance FromJSON (SwaggerItems 'SwaggerKindSchema) where
1221instance FromJSON (SwaggerItems 'SwaggerKindSchema) where
1222+ parseJSON js@(Object obj)
1209− parseJSON js | js == object [] = pure $ SwaggerItemsArray [] -- Nullary schema.
1223+ | null obj = pure $ SwaggerItemsArray [] -- Nullary schema.
1210− parseJSON js@(Object _) = SwaggerItemsObject <$> parseJSON js
1224+ | otherwise = SwaggerItemsObject <$> parseJSON js
1211 parseJSON js@(Array _) = SwaggerItemsArray <$> parseJSON js
1225 parseJSON js@(Array _) = SwaggerItemsArray <$> parseJSON js
1212 parseJSON _ = empty
1226 parseJSON _ = empty
1213
1227