git.iko.soy/typeable/swagger2
on c03fdf1 help sign in
7 files changed+11−107
since splitsnapshots
unifiedsplit
CHANGELOG.md−13 src/Data/Swagger.hs+1−2 src/Data/Swagger/Internal.hs+1−36 src/Data/Swagger/Lens.hs−6 stack.yaml+5−6 swagger2.cabal+2−1 test/Data/SwaggerSpec.hs+2−43
CHANGELOG.md−13
@@ -1,16 +1,3 @@
1−2.5
2−---
3−
4−Highlights:
5−- Add instance for `TimeOfDay` (see [#196]( https://github.com/GetShopTV/swagger2/pull/196 ));
6−- Add support for [`optics`](https://hackage.haskell.org/package/optics) (see [#200]( https://github.com/GetShopTV/swagger2/pull/200 ));
7−- Slightly better validation errors (see [#195]( https://github.com/GetShopTV/swagger2/pull/195 ));
8−
9−Fixes and minor changes:
10−- Minor cleanup (see [#194]( https://github.com/GetShopTV/swagger2/pull/194 ));
11−- Allow base-4.13 and other GHC-8.8 related stuff (see [#198]( https://github.com/GetShopTV/swagger2/pull/198 ));
12−- Fix `stack.yaml` (see [#201]( https://github.com/GetShopTV/swagger2/pull/201 ));
13−
1412.4
152---
163
src/Data/Swagger.hs+1−2
@@ -89,7 +89,6 @@ module Data.Swagger (
8989 SecurityScheme(..),
9090 SecuritySchemeType(..),
9191 SecurityRequirement(..),
92− SecurityDefinitions(..),
9392
9493 -- *** API key
9594 ApiKeyParams(..),
@@ -280,7 +279,7 @@ import Data.Swagger.Internal
280279-- >>> encode $ toSchema (Proxy :: Proxy Person)
281280-- "{\"required\":[\"name\",\"age\"],\"properties\":{\"name\":{\"type\":\"string\"},\"age\":{\"type\":\"integer\"}},\"type\":\"object\"}"
282281--
283−-- Please note that not all valid Haskell data types will have a proper swagger schema. For example while we can derive a
282+-- Please note that not all valid Haskell data types will have a proper swagger schema. For example while we can derive a
284283-- schema for basic enums like
285284--
286285-- >>> data SampleEnum = ChoiceOne | ChoiceTwo deriving Generic
src/Data/Swagger/Internal.hs+1−36
@@ -117,7 +117,7 @@ data Swagger = Swagger
117117 , _swaggerResponses :: Definitions Response
118118
119119 -- | Security scheme definitions that can be used across the specification.
120− , _swaggerSecurityDefinitions :: SecurityDefinitions
120+ , _swaggerSecurityDefinitions :: Definitions SecurityScheme
121121
122122 -- | A declaration of which security schemes are applied for the API as a whole.
123123 -- The list of values describes alternative security schemes that can be used
@@ -755,22 +755,6 @@ data SecurityScheme = SecurityScheme
755755 , _securitySchemeDescription :: Maybe Text
756756 } deriving (Eq, Show, Generic, Data, Typeable)
757757
758−
759−-- | merge scopes of two OAuth2 security schemes when their flows are identical.
760−-- In other case returns first security scheme
761−mergeSecurityScheme :: SecurityScheme -> SecurityScheme -> SecurityScheme
762−mergeSecurityScheme s1@(SecurityScheme (SecuritySchemeOAuth2 (OAuth2Params flow1 scopes1)) desc)
763− s2@(SecurityScheme (SecuritySchemeOAuth2 (OAuth2Params flow2 scopes2)) _)
764− = if flow1 == flow2 then
765− SecurityScheme (SecuritySchemeOAuth2 (OAuth2Params flow1 (scopes1 <> scopes2))) desc
766− else
767− s1
768−mergeSecurityScheme s1 _ = s1
769−
770−newtype SecurityDefinitions
771− = SecurityDefinitions (Definitions SecurityScheme)
772− deriving (Eq, Show, Generic, Data, Typeable)
773−
774758-- | Lists the required security schemes to execute this operation.
775759-- The object can have multiple security schemes declared in it which are all required
776760-- (that is, there is a logical AND between the schemes).
@@ -920,17 +904,6 @@ instance Monoid Example where
920904 mempty = genericMempty
921905 mappend = (<>)
922906
923−instance Semigroup SecurityScheme where
924− (<>) = mergeSecurityScheme
925−
926−instance Semigroup SecurityDefinitions where
927− (SecurityDefinitions sd1) <> (SecurityDefinitions sd2) =
928− SecurityDefinitions $ InsOrdHashMap.unionWith (<>) sd1 sd2
929−
930−instance Monoid SecurityDefinitions where
931− mempty = SecurityDefinitions $ InsOrdHashMap.empty
932− mappend = (<>)
933−
934907-- =======================================================================
935908-- SwaggerMonoid helper instances
936909-- =======================================================================
@@ -945,7 +918,6 @@ instance SwaggerMonoid Responses
945918instance SwaggerMonoid Response
946919instance SwaggerMonoid ExternalDocs
947920instance SwaggerMonoid Operation
948−instance SwaggerMonoid SecurityDefinitions
949921instance (Eq a, Hashable a) => SwaggerMonoid (InsOrdHashSet a)
950922
951923instance SwaggerMonoid MimeList
@@ -1146,9 +1118,6 @@ instance ToJSON PathItem where
11461118instance ToJSON Example where
11471119 toJSON = toJSON . Map.mapKeys show . getExample
11481120
1149−instance ToJSON SecurityDefinitions where
1150− toJSON (SecurityDefinitions sd) = toJSON sd
1151−
11521121instance ToJSON Reference where
11531122 toJSON (Reference ref) = object [ "$ref" .= ref ]
11541123
@@ -1310,9 +1279,6 @@ instance FromJSON Operation where
13101279instance FromJSON PathItem where
13111280 parseJSON = sopSwaggerGenericParseJSON
13121281
1313−instance FromJSON SecurityDefinitions where
1314− parseJSON js = SecurityDefinitions <$> parseJSON js
1315−
13161282instance FromJSON Reference where
13171283 parseJSON (Object o) = Reference <$> o .: "$ref"
13181284 parseJSON _ = empty
@@ -1424,4 +1390,3 @@ instance AesonDefaultValue (SwaggerType a)
14241390instance AesonDefaultValue MimeList where defaultValue = Just mempty
14251391instance AesonDefaultValue Info
14261392instance AesonDefaultValue ParamLocation
1427−instance AesonDefaultValue SecurityDefinitions where defaultValue = Just $ SecurityDefinitions mempty
src/Data/Swagger/Lens.hs−6
@@ -96,12 +96,6 @@ instance At Responses where at n = responses . at n
9696instance Ixed Operation where ix n = responses . ix n
9797instance At Operation where at n = responses . at n
9898
99−type instance Index SecurityDefinitions = Text
100−type instance IxValue SecurityDefinitions = SecurityScheme
101−
102−instance Ixed SecurityDefinitions where ix n = (coerced :: Lens' SecurityDefinitions (Definitions SecurityScheme)). ix n
103−instance At SecurityDefinitions where at n = (coerced :: Lens' SecurityDefinitions (Definitions SecurityScheme)). at n
104−
10599instance HasParamSchema NamedSchema (ParamSchema 'SwaggerKindSchema) where paramSchema = schema.paramSchema
106100
107101-- HasType instances
stack.yaml+5−6
@@ -1,9 +1,8 @@
1−resolver: lts-14.3
1+resolver: lts-12.10
22packages:
33- '.'
44extra-deps:
5−- optics-core-0.2
6−- optics-th-0.2
7−- optics-extra-0.2
8−- indexed-profunctors-0.1
9−- insert-ordered-containers-0.2.3
5+- aeson-1.4.2.0
6+- base-compat-batteries-0.10.4
7+- contravariant-1.5
8+- insert-ordered-containers-0.2.2
swagger2.cabal+2−1
@@ -1,6 +1,7 @@
11cabal-version: >=1.10
22name: swagger2
3−version: 2.5
3+version: 2.4
4+x-revision: 1
45
56synopsis: Swagger 2.0 data model
67category: Web, Swagger
test/Data/SwaggerSpec.hs+2−43
@@ -43,7 +43,6 @@ spec = do
4343 describe "Parameters Definition Object" $ paramsDefinitionExample <=> paramsDefinitionExampleJSON
4444 describe "Responses Definition Object" $ responsesDefinitionExample <=> responsesDefinitionExampleJSON
4545 describe "Security Definitions Object" $ securityDefinitionsExample <=> securityDefinitionsExampleJSON
46− describe "OAuth2 Security Definitions with merged Scope" $ oAuth2SecurityDefinitionsExample <=> oAuth2SecurityDefinitionsExampleJSON
4746 describe "Composition Schema Example" $ compositionSchemaExample <=> compositionSchemaExampleJSON
4847 describe "Swagger Object" $ do
4948 context "Todo Example" $ swaggerExample <=> swaggerExampleJSON
@@ -460,8 +459,8 @@ responsesDefinitionExampleJSON = [aesonQQ|
460459-- Responses Definition object
461460-- =======================================================================
462461
463−securityDefinitionsExample :: SecurityDefinitions
464−securityDefinitionsExample = SecurityDefinitions
462+securityDefinitionsExample :: HashMap Text SecurityScheme
463+securityDefinitionsExample =
465464 [ ("api_key", SecurityScheme
466465 { _securitySchemeType = SecuritySchemeApiKey (ApiKeyParams "api_key" ApiKeyHeader)
467466 , _securitySchemeDescription = Nothing })
@@ -493,46 +492,6 @@ securityDefinitionsExampleJSON = [aesonQQ|
493492}
494493|]
495494
496−oAuth2SecurityDefinitionsReadExample :: SecurityDefinitions
497−oAuth2SecurityDefinitionsReadExample = SecurityDefinitions
498− [ ("petstore_auth", SecurityScheme
499− { _securitySchemeType = SecuritySchemeOAuth2 (OAuth2Params
500− { _oauth2Flow = OAuth2Implicit "http://swagger.io/api/oauth/dialog"
501− , _oauth2Scopes =
502− [ ("read:pets", "read your pets") ] } )
503− , _securitySchemeDescription = Nothing })
504− ]
505−
506−oAuth2SecurityDefinitionsWriteExample :: SecurityDefinitions
507−oAuth2SecurityDefinitionsWriteExample = SecurityDefinitions
508− [ ("petstore_auth", SecurityScheme
509− { _securitySchemeType = SecuritySchemeOAuth2 (OAuth2Params
510− { _oauth2Flow = OAuth2Implicit "http://swagger.io/api/oauth/dialog"
511− , _oauth2Scopes =
512− [ ("write:pets", "modify pets in your account") ] } )
513− , _securitySchemeDescription = Nothing })
514− ]
515−
516−oAuth2SecurityDefinitionsExample :: SecurityDefinitions
517−oAuth2SecurityDefinitionsExample =
518− oAuth2SecurityDefinitionsWriteExample <>
519− oAuth2SecurityDefinitionsReadExample
520−
521−oAuth2SecurityDefinitionsExampleJSON :: Value
522−oAuth2SecurityDefinitionsExampleJSON = [aesonQQ|
523−{
524− "petstore_auth": {
525− "type": "oauth2",
526− "authorizationUrl": "http://swagger.io/api/oauth/dialog",
527− "flow": "implicit",
528− "scopes": {
529− "write:pets": "modify pets in your account",
530− "read:pets": "read your pets"
531− }
532− }
533−}
534−|]
535−
536495-- =======================================================================
537496-- Swagger object
538497-- =======================================================================