git.iko.soy/typeable/mock-server-client
on master help sign in
apply manual fixups to srcs
commit29a05f217b0d27ab9f19d58285b64489dd78b4a8 authorAleksey Uymanov <s9gf4ult@gmail.com> dateFri 20 Jan 2023, 00:05 (4 years ago) parentb818400
4 files changed+38−18
mock-server-client.cabal+2 src/MockServer/Common.hs+23−5 src/MockServer/Types/JsonSchemaBodyMatcher.hs+6−6 src/MockServer/Types/StringOrJsonSchema.hs+7−7
mock-server-client.cabal+2
@@ -76,6 +76,7 @@ library
7676 , http-types
7777 , bytestring
7878 , aeson
79+ , openapi3
7980 , unordered-containers
8081 , vector
8182 , scientific
@@ -83,3 +84,4 @@ library
8384 , mtl
8485 , transformers
8586 default-language: Haskell2010
87+ default-extensions: DeriveGeneric
src/MockServer/Common.hs+23−5
@@ -1,3 +1,4 @@
1+{-# LANGUAGE CPP #-}
12{-# LANGUAGE FlexibleInstances #-}
23{-# LANGUAGE GeneralizedNewtypeDeriving #-}
34{-# LANGUAGE LambdaCase #-}
@@ -33,12 +34,18 @@ where
3334import qualified Control.Monad.IO.Class as MIO
3435import qualified Control.Monad.Reader as MR
3536import qualified Control.Monad.Trans.Class as MT
37+#if MIN_VERSION_aeson(2,0,0)
38+import qualified Data.Aeson.KeyMap as KeyMap
39+import qualified Data.Aeson.Key as Key
40+import Data.Bifunctor
41+#else
42+import qualified Data.HashMap.Strict as HashMap
43+#endif
3644import qualified Data.Aeson as Aeson
3745import qualified Data.Aeson.Encoding as Encoding
3846import qualified Data.Bifunctor as BF
3947import qualified Data.ByteString.Char8 as B8
4048import qualified Data.ByteString.Lazy.Char8 as LB8
41−import qualified Data.HashMap.Strict as HMap
4249import qualified Data.Maybe as Maybe
4350import qualified Data.Scientific as Scientific
4451import Data.Text (Text)
@@ -50,6 +57,15 @@ import qualified Network.HTTP.Client as HC
5057import qualified Network.HTTP.Simple as HS
5158import qualified Network.HTTP.Types as HT
5259
60+
61+#if MIN_VERSION_aeson(2,0,0)
62+toList' :: Aeson.Object -> [(Text, Aeson.Value)]
63+toList' = fmap (first Key.toText) . KeyMap.toList
64+#else
65+toList' :: Aeson.Object -> [(Text, Aeson.Value)]
66+toList' = HashMap.toList
67+#endif
68+
5369-- | Abstracts the usage of 'Network.HTTP.Simple.httpBS' away,
5470-- so that it can be used for testing
5571class Monad m => MonadHTTP m where
@@ -285,8 +301,10 @@ jsonToFormDataFlat _ Aeson.Null = []
285301jsonToFormDataFlat name (Aeson.Number a) = [(name, encodeStrict a)]
286302jsonToFormDataFlat name (Aeson.String a) = [(name, textToByte a)]
287303jsonToFormDataFlat name (Aeson.Bool a) = [(name, encodeStrict a)]
288−jsonToFormDataFlat _ (Aeson.Object object) = HMap.toList object >>= uncurry jsonToFormDataFlat . BF.first Just
289−jsonToFormDataFlat name (Aeson.Array vector) = Vector.toList vector >>= jsonToFormDataFlat name
304+jsonToFormDataFlat _ (Aeson.Object object) =
305+ toList' object >>= uncurry jsonToFormDataFlat . BF.first Just
306+jsonToFormDataFlat name (Aeson.Array vector) =
307+ Vector.toList vector >>= jsonToFormDataFlat name
290308
291309-- | creates form data bytestring array
292310createFormData :: (Aeson.ToJSON a) => a -> [(B8.ByteString, B8.ByteString)]
@@ -320,9 +338,9 @@ jsonToFormDataPrefixed prefix (Aeson.Bool False) = [(prefix, "false")]
320338jsonToFormDataPrefixed _ Aeson.Null = []
321339jsonToFormDataPrefixed prefix (Aeson.String a) = [(prefix, a)]
322340jsonToFormDataPrefixed "" (Aeson.Object object) =
323− HMap.toList object >>= uncurry jsonToFormDataPrefixed
341+ toList' object >>= uncurry jsonToFormDataPrefixed
324342jsonToFormDataPrefixed prefix (Aeson.Object object) =
325− HMap.toList object >>= (\(x, y) -> jsonToFormDataPrefixed (prefix <> "[" <> x <> "]") y)
343+ toList' object >>= (\(x, y) -> jsonToFormDataPrefixed (prefix <> "[" <> x <> "]") y)
326344jsonToFormDataPrefixed prefix (Aeson.Array vector) =
327345 Vector.toList vector >>= jsonToFormDataPrefixed (prefix <> "[]")
328346
src/MockServer/Types/JsonSchemaBodyMatcher.hs+6−6
@@ -6,20 +6,19 @@
66-- | Contains the types generated from the schema JsonSchemaBodyMatcher
77module MockServer.Types.JsonSchemaBodyMatcher where
88
9−import qualified Prelude as GHC.Integer.Type
10−import qualified Prelude as GHC.Maybe
119import qualified Control.Monad.Fail
1210import qualified Data.Aeson
1311import qualified Data.Aeson as Data.Aeson.Encoding.Internal
1412import qualified Data.Aeson as Data.Aeson.Types
1513import qualified Data.Aeson as Data.Aeson.Types.FromJSON
16−import qualified Data.Aeson as Data.Aeson.Types.ToJSON
1714import qualified Data.Aeson as Data.Aeson.Types.Internal
15+import qualified Data.Aeson as Data.Aeson.Types.ToJSON
1816import qualified Data.ByteString.Char8
1917import qualified Data.ByteString.Char8 as Data.ByteString.Internal
2018import qualified Data.Foldable
2119import qualified Data.Functor
2220import qualified Data.Maybe
21+import Data.OpenApi.Internal (Schema)
2322import qualified Data.Scientific
2423import qualified Data.Text
2524import qualified Data.Text.Internal
@@ -32,14 +31,15 @@ import qualified GHC.Show
3231import qualified GHC.Types
3332import qualified MockServer.Common
3433import MockServer.TypeAlias
35−import {-# SOURCE #-} MockServer.Types.Http__JsonSchema_OrgDraft_04Schema
34+import qualified Prelude as GHC.Integer.Type
35+import qualified Prelude as GHC.Maybe
3636
3737-- | Defines the object schema located at @components.schemas.JsonSchemaBodyMatcher@ in the specification.
38−--
38+--
3939-- json schema body matcher
4040data JsonSchemaBodyMatcher = JsonSchemaBodyMatcher {
4141 -- | jsonSchema
42− jsonSchemaBodyMatcherJsonSchema :: (GHC.Maybe.Maybe Http___json_schema'org_draft_04_schema)
42+ jsonSchemaBodyMatcherJsonSchema :: (GHC.Maybe.Maybe Schema)
4343 -- | not
4444 , jsonSchemaBodyMatcherNot :: (GHC.Maybe.Maybe GHC.Types.Bool)
4545 -- | type
src/MockServer/Types/StringOrJsonSchema.hs+7−7
@@ -6,20 +6,19 @@
66-- | Contains the types generated from the schema StringOrJsonSchema
77module MockServer.Types.StringOrJsonSchema where
88
9−import qualified Prelude as GHC.Integer.Type
10−import qualified Prelude as GHC.Maybe
119import qualified Control.Monad.Fail
1210import qualified Data.Aeson
1311import qualified Data.Aeson as Data.Aeson.Encoding.Internal
1412import qualified Data.Aeson as Data.Aeson.Types
1513import qualified Data.Aeson as Data.Aeson.Types.FromJSON
16−import qualified Data.Aeson as Data.Aeson.Types.ToJSON
1714import qualified Data.Aeson as Data.Aeson.Types.Internal
15+import qualified Data.Aeson as Data.Aeson.Types.ToJSON
1816import qualified Data.ByteString.Char8
1917import qualified Data.ByteString.Char8 as Data.ByteString.Internal
2018import qualified Data.Foldable
2119import qualified Data.Functor
2220import qualified Data.Maybe
21+import Data.OpenApi.Internal (Schema)
2322import qualified Data.Scientific
2423import qualified Data.Text
2524import qualified Data.Text.Internal
@@ -32,11 +31,12 @@ import qualified GHC.Show
3231import qualified GHC.Types
3332import qualified MockServer.Common
3433import MockServer.TypeAlias
35−import {-# SOURCE #-} MockServer.Types.Http__JsonSchema_OrgDraft_04Schema
34+import qualified Prelude as GHC.Integer.Type
35+import qualified Prelude as GHC.Maybe
3636
3737-- | Defines the object schema located at @components.schemas.StringOrJsonSchema.oneOf@ in the specification.
38−--
39−--
38+--
39+--
4040data StringOrJsonSchemaOneOf2 = StringOrJsonSchemaOneOf2 {
4141 -- | not
4242 stringOrJsonSchemaOneOf2Not :: (GHC.Maybe.Maybe GHC.Types.Bool)
@@ -45,7 +45,7 @@ data StringOrJsonSchemaOneOf2 = StringOrJsonSchemaOneOf2 {
4545 -- | parameterStyle
4646 , stringOrJsonSchemaOneOf2ParameterStyle :: (GHC.Maybe.Maybe StringOrJsonSchemaOneOf2ParameterStyle)
4747 -- | schema
48− , stringOrJsonSchemaOneOf2Schema :: (GHC.Maybe.Maybe Http___json_schema'org_draft_04_schema)
48+ , stringOrJsonSchemaOneOf2Schema :: (GHC.Maybe.Maybe Schema)
4949 -- | value
5050 , stringOrJsonSchemaOneOf2Value :: (GHC.Maybe.Maybe Data.Text.Internal.Text)
5151 } deriving (GHC.Show.Show