Skip to content

Commit c2575df

Browse files
committed
Aeson 2 for extensions
1 parent 86511ac commit c2575df

File tree

2 files changed

+15
-10
lines changed

2 files changed

+15
-10
lines changed

src/Data/OpenApi/Aeson/Compat.hs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ lookupKey = KeyMap.lookup . Key.fromText
4646

4747
hasKey :: T.Text -> KeyMap.KeyMap a -> Bool
4848
hasKey = KeyMap.member . Key.fromText
49+
50+
filterKeys :: (Key -> Bool) -> KeyMap.KeyMap a -> KeyMap.KeyMap a
51+
filterKeys p = KeyMap.filterWithKey (\key _ -> p key)
4952
#else
5053
filterWithKey :: (T.Text -> v -> Bool) -> HM.HashMap T.Text v -> HM.HashMap T.Text v
5154
filterWithKey = HM.filterWithKey
@@ -79,4 +82,7 @@ lookupKey = HM.lookup
7982

8083
hasKey :: T.Text -> HM.HashMap T.Text a -> Bool
8184
hasKey = HM.member
85+
86+
filterKeys :: (T.Text -> Bool) -> HM.HashMap T.Text a -> HM.HashMap T.Text a
87+
filterKeys p = HM.filterWithKey (\key _ -> p key)
8288
#endif

src/Data/OpenApi/Internal.hs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ import Text.Read (readMaybe)
4949
import Data.HashMap.Strict.InsOrd (InsOrdHashMap)
5050
import qualified Data.HashMap.Strict.InsOrd as InsOrdHashMap
5151

52-
import Data.OpenApi.Aeson.Compat (deleteKey, filterWithKey, objectToList, keyToText)
52+
import Data.OpenApi.Aeson.Compat (deleteKey, filterKeys, objectToList, keyToText)
5353
import Data.OpenApi.Internal.AesonUtils (AesonDefaultValue (..), HasSwaggerAesonOptions (..),
5454
mkSwaggerAesonOptions, saoAdditionalPairs, saoSubObject,
5555
sopSwaggerGenericParseJSON, sopSwaggerGenericToEncoding,
@@ -1606,14 +1606,14 @@ instance FromJSON Responses where
16061606
<$> o .:? "default"
16071607
<*> parseJSON
16081608
( Object
1609-
( filterWithKey (\k _ -> not $ isExt k)
1610-
$ deleteKey "default" o
1609+
( filterKeys (not . isExt . keyToText) $
1610+
deleteKey "default" o
16111611
)
16121612
)
1613-
<*> case filterWithKey (\k _ -> isExt k) o of
1614-
exts
1615-
| null exts -> pure (SpecificationExtensions mempty)
1616-
| otherwise -> parseJSON (Object exts)
1613+
<*> case filterKeys (isExt . keyToText) o of
1614+
exts
1615+
| null exts -> pure (SpecificationExtensions mempty)
1616+
| otherwise -> parseJSON (Object exts)
16171617

16181618
parseJSON _ = empty
16191619

@@ -1689,7 +1689,7 @@ instance FromJSON SpecificationExtensions where
16891689
parseJSON = withObject "SpecificationExtensions" extFieldsParser
16901690
where
16911691
extFieldsParser = pure . SpecificationExtensions . InsOrdHashMap.fromList . catMaybes . filterExtFields
1692-
filterExtFields = fmap (\(k, v) -> fmap (\k' -> (k', v)) $ Text.stripPrefix "x-" (keyToText k)) . objectToList
1692+
filterExtFields = fmap (\(k, v) -> (, v) <$> Text.stripPrefix "x-" (keyToText k)) . objectToList
16931693

16941694
instance FromJSON Info where
16951695
parseJSON = sopSwaggerGenericParseJSONWithOpts (mkSwaggerAesonOptions "Info")
@@ -1743,8 +1743,7 @@ instance HasSwaggerAesonOptions Schema where
17431743
instance HasSwaggerAesonOptions OpenApiSpecVersion where
17441744
swaggerAesonOptions _ = mkSwaggerAesonOptions "openapi"
17451745
instance HasSwaggerAesonOptions OpenApi where
1746-
swaggerAesonOptions _ = mkSwaggerAesonOptions "swagger"
1747-
& saoSubObject .~ ["extensions"]
1746+
swaggerAesonOptions _ = mkSwaggerAesonOptions "swagger" & saoSubObject .~ ["extensions"]
17481747
instance HasSwaggerAesonOptions Example where
17491748
swaggerAesonOptions _ = mkSwaggerAesonOptions "example" & saoSubObject .~ ["extensions"]
17501749
instance HasSwaggerAesonOptions Encoding where

0 commit comments

Comments
 (0)