json-spec-openapi 0.2.0.0 → 0.2.1.0
raw patch · 3 files changed
+42/−9 lines, 3 filesdep ~insert-ordered-containersPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: insert-ordered-containers
API changes (from Hackage documentation)
+ Data.JsonSpec.OpenApi: instance Data.JsonSpec.OpenApi.Schemaable spec => Data.JsonSpec.OpenApi.Schemaable ('Data.JsonSpec.Spec.JsonNullable spec)
Files
- json-spec-openapi.cabal +2/−2
- src/Data/JsonSpec/OpenApi.hs +17/−6
- test/test.hs +23/−1
json-spec-openapi.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: json-spec-openapi-version: 0.2.0.0+version: 0.2.1.0 synopsis: json-spec-openapi description: This package provides a way to produce@@ -64,7 +64,7 @@ build-depends: , aeson >= 2.2.1.0 && < 2.3 , base >= 4.19.0.0 && < 4.20- , insert-ordered-containers >= 0.2.5 && < 0.3+ , insert-ordered-containers >= 0.2.5.3 && < 0.3 , json-spec >= 0.2.1.3 && < 0.3 , lens >= 5.2.3 && < 5.3 , openapi3 >= 3.2.4 && < 3.3
src/Data/JsonSpec/OpenApi.hs view
@@ -104,16 +104,17 @@ import Data.Functor.Identity (Identity(runIdentity)) import Data.JsonSpec (HasJsonDecodingSpec(DecodingSpec), HasJsonEncodingSpec(EncodingSpec), Specification(JsonArray, JsonBool,- JsonDateTime, JsonEither, JsonInt, JsonLet, JsonNum, JsonObject,- JsonRef, JsonString, JsonTag))+ JsonDateTime, JsonEither, JsonInt, JsonLet, JsonNullable, JsonNum,+ JsonObject, JsonRef, JsonString, JsonTag)) import Data.OpenApi (AdditionalProperties(AdditionalPropertiesAllowed), HasAdditionalProperties(additionalProperties), HasEnum(enum_), HasFormat(format), HasItems(items), HasOneOf(oneOf), HasProperties(properties), HasRequired(required), HasType(type_), NamedSchema(NamedSchema), OpenApiItems(OpenApiItemsObject),- OpenApiType(OpenApiArray, OpenApiBoolean, OpenApiInteger, OpenApiNumber,- OpenApiObject, OpenApiString), Reference(Reference), Referenced(Inline,- Ref), ToSchema(declareNamedSchema), Definitions, Schema)+ OpenApiType(OpenApiArray, OpenApiBoolean, OpenApiInteger, OpenApiNull,+ OpenApiNumber, OpenApiObject, OpenApiString), Reference(Reference),+ Referenced(Inline, Ref), ToSchema(declareNamedSchema), Definitions,+ Schema) import Data.OpenApi.Declare (DeclareT(runDeclareT), MonadDeclare(declare)) import Data.String (IsString(fromString)) import Data.Text (Text)@@ -314,7 +315,7 @@ mempty & set type_ (Just OpenApiString) & set format (Just "date-time")-instance+instance {- Undefined Let -} Unsatisfiable ( T "`JsonRef \"" :<>: T target :<>: T "\"` is not defined.\n" :$$: T "You are trying to use a JsonRef as the \"top level\" "@@ -364,6 +365,16 @@ schemaable Proxy = do mkDefs (Proxy @defs) schemaable (Proxy @spec)+instance (Schemaable spec) => Schemaable (JsonNullable spec) where+ schemaable Proxy = do+ schema <- schemaable (Proxy @spec)+ pure $+ mempty+ & set oneOf (Just+ [ Inline (mempty & set type_ (Just OpenApiNull))+ , Inline schema+ ]+ ) {-| Go through and make a declaration for each item in a JsonLet. -}
test/test.hs view
@@ -16,7 +16,8 @@ import Data.JsonSpec (Field(Field), HasJsonDecodingSpec(DecodingSpec, fromJSONStructure), HasJsonEncodingSpec(EncodingSpec, toJSONStructure), SpecJSON(SpecJSON), Specification(JsonArray, JsonBool, JsonDateTime,- JsonEither, JsonLet, JsonNum, JsonObject, JsonRef, JsonString, JsonTag))+ JsonEither, JsonInt, JsonLet, JsonNullable, JsonNum, JsonObject,+ JsonRef, JsonString, JsonTag)) import Data.JsonSpec.OpenApi (EncodingSchema, toOpenApiSchema) import Data.OpenApi (Definitions, ToSchema) import Data.Proxy (Proxy(Proxy))@@ -190,6 +191,27 @@ expected = (mempty, boolSchema) in actual `shouldBe` expected++ it "nullable" $+ let+ actual :: (Definitions OA.Schema, OA.Schema)+ actual =+ toOpenApiSchema (Proxy @(JsonNullable JsonInt))++ expected :: (Definitions OA.Schema, OA.Schema)+ expected =+ ( mempty+ , mempty+ & set OA.oneOf (Just+ [ OA.Inline $+ mempty & set OA.type_ (Just OA.OpenApiNull)+ , OA.Inline $+ mempty & set OA.type_ (Just OA.OpenApiInteger)+ ]+ )+ )+ in+ encode actual `shouldBe` encode expected it "date-time" $ let