git.iko.soy/typeable/openapi3
on 4cb12af help sign in
180 lines 5.9 kB history raw
1{-# LANGUAGE CPP #-}
2{-# LANGUAGE FlexibleContexts #-}
3{-# LANGUAGE FlexibleInstances #-}
4{-# LANGUAGE FunctionalDependencies #-}
5{-# LANGUAGE GADTs #-}
6{-# LANGUAGE MultiParamTypeClasses #-}
7{-# LANGUAGE RankNTypes #-}
8{-# LANGUAGE TemplateHaskell #-}
9{-# LANGUAGE TypeFamilies #-}
10{-# LANGUAGE DataKinds #-}
11{-# LANGUAGE UndecidableInstances #-}
12{-# OPTIONS_GHC -fno-warn-orphans #-}
13#include "overlapping-compat.h"
14-- |
15-- Module: Data.Swagger.Lens
16-- Maintainer: Nickolay Kudasov <nickolay@getshoptv.com>
17-- Stability: experimental
18--
19-- Lenses and prisms for Swagger.
20module Data.Swagger.Lens where
22import Control.Lens
23import Data.Aeson (Value)
24import Data.Scientific (Scientific)
25import Data.Swagger.Internal
26import Data.Swagger.Internal.Utils
27import Data.Text (Text)
29-- * Classy lenses
31makeFields ''Swagger
32makeFields ''Host
33makeFields ''Info
34makeFields ''Contact
35makeFields ''License
36makeLensesWith swaggerFieldRules ''PathItem
37makeFields ''Tag
38makeFields ''Operation
39makeFields ''Param
40makeLensesWith swaggerFieldRules ''ParamOtherSchema
41makeFields ''Header
42makeFields ''Schema
43makeFields ''NamedSchema
44makeLensesWith swaggerFieldRules ''ParamSchema
45makeFields ''Xml
46makeLensesWith swaggerFieldRules ''Responses
47makeFields ''Response
48makeLensesWith swaggerFieldRules ''SecurityScheme
49makeFields ''ApiKeyParams
50makeFields ''OAuth2Params
51makeFields ''ExternalDocs
53-- * Prisms
54-- ** 'ParamAnySchema' prisms
55makePrisms ''ParamAnySchema
56-- ** 'SecuritySchemeType' prisms
57makePrisms ''SecuritySchemeType
58-- ** 'Referenced' prisms
59makePrisms ''Referenced
61-- ** 'SwaggerItems' prisms
63_SwaggerItemsArray :: Review (SwaggerItems 'SwaggerKindSchema) [Referenced Schema]
64_SwaggerItemsArray
65 = unto (\x -> SwaggerItemsArray x)
66{- \x -> case x of
67 SwaggerItemsPrimitive c p -> Left (SwaggerItemsPrimitive c p)
68 SwaggerItemsObject o -> Left (SwaggerItemsObject o)
69 SwaggerItemsArray a -> Right a
70-}
72_SwaggerItemsObject :: Review (SwaggerItems 'SwaggerKindSchema) (Referenced Schema)
73_SwaggerItemsObject
74 = unto (\x -> SwaggerItemsObject x)
75{- \x -> case x of
76 SwaggerItemsPrimitive c p -> Left (SwaggerItemsPrimitive c p)
77 SwaggerItemsObject o -> Right o
78 SwaggerItemsArray a -> Left (SwaggerItemsArray a)
79-}
81_SwaggerItemsPrimitive :: forall t p f. (Profunctor p, Bifunctor p, Functor f) => Optic' p f (SwaggerItems t) (Maybe (CollectionFormat t), ParamSchema t)
82_SwaggerItemsPrimitive = unto (\(c, p) -> SwaggerItemsPrimitive c p)
84-- =============================================================
85-- More helpful instances for easier access to schema properties
87type instance Index Responses = HttpStatusCode
88type instance Index Operation = HttpStatusCode
90type instance IxValue Responses = Referenced Response
91type instance IxValue Operation = Referenced Response
93instance Ixed Responses where ix n = responses . ix n
94instance At Responses where at n = responses . at n
96instance Ixed Operation where ix n = responses . ix n
97instance At Operation where at n = responses . at n
99instance HasParamSchema NamedSchema (ParamSchema 'SwaggerKindSchema) where paramSchema = schema.paramSchema
101-- HasType instances
102instance HasType Header (SwaggerType ('SwaggerKindNormal Header)) where type_ = paramSchema.type_
103instance HasType Schema (SwaggerType 'SwaggerKindSchema) where type_ = paramSchema.type_
104instance HasType NamedSchema (SwaggerType 'SwaggerKindSchema) where type_ = paramSchema.type_
105instance HasType ParamOtherSchema (SwaggerType 'SwaggerKindParamOtherSchema) where type_ = paramSchema.type_
107-- HasDefault instances
108instance HasDefault Header (Maybe Value) where default_ = paramSchema.default_
109instance HasDefault Schema (Maybe Value) where default_ = paramSchema.default_
110instance HasDefault ParamOtherSchema (Maybe Value) where default_ = paramSchema.default_
112-- OVERLAPPABLE instances
114instance
115#if __GLASGOW_HASKELL__ >= 710
116 OVERLAPPABLE_
117#endif
118 HasParamSchema s (ParamSchema t)
119 => HasFormat s (Maybe Format) where
120 format = paramSchema.format
122instance
123#if __GLASGOW_HASKELL__ >= 710
124 OVERLAPPABLE_
125#endif
126 HasParamSchema s (ParamSchema t)
127 => HasItems s (Maybe (SwaggerItems t)) where
128 items = paramSchema.items
130instance
131#if __GLASGOW_HASKELL__ >= 710
132 OVERLAPPABLE_
133#endif
134 HasParamSchema s (ParamSchema t)
135 => HasMaximum s (Maybe Scientific) where
136 maximum_ = paramSchema.maximum_
138instance OVERLAPPABLE_ HasParamSchema s (ParamSchema t)
139 => HasExclusiveMaximum s (Maybe Bool) where
140 exclusiveMaximum = paramSchema.exclusiveMaximum
142instance OVERLAPPABLE_ HasParamSchema s (ParamSchema t)
143 => HasMinimum s (Maybe Scientific) where
144 minimum_ = paramSchema.minimum_
146instance OVERLAPPABLE_ HasParamSchema s (ParamSchema t)
147 => HasExclusiveMinimum s (Maybe Bool) where
148 exclusiveMinimum = paramSchema.exclusiveMinimum
150instance OVERLAPPABLE_ HasParamSchema s (ParamSchema t)
151 => HasMaxLength s (Maybe Integer) where
152 maxLength = paramSchema.maxLength
154instance OVERLAPPABLE_ HasParamSchema s (ParamSchema t)
155 => HasMinLength s (Maybe Integer) where
156 minLength = paramSchema.minLength
158instance OVERLAPPABLE_ HasParamSchema s (ParamSchema t)
159 => HasPattern s (Maybe Text) where
160 pattern = paramSchema.pattern
162instance OVERLAPPABLE_ HasParamSchema s (ParamSchema t)
163 => HasMaxItems s (Maybe Integer) where
164 maxItems = paramSchema.maxItems
166instance OVERLAPPABLE_ HasParamSchema s (ParamSchema t)
167 => HasMinItems s (Maybe Integer) where
168 minItems = paramSchema.minItems
170instance OVERLAPPABLE_ HasParamSchema s (ParamSchema t)
171 => HasUniqueItems s (Maybe Bool) where
172 uniqueItems = paramSchema.uniqueItems
174instance OVERLAPPABLE_ HasParamSchema s (ParamSchema t)
175 => HasEnum s (Maybe [Value]) where
176 enum_ = paramSchema.enum_
178instance OVERLAPPABLE_ HasParamSchema s (ParamSchema t)
179 => HasMultipleOf s (Maybe Scientific) where
180 multipleOf = paramSchema.multipleOf