autodocodec-openapi3 0.2.1.3 → 0.2.1.4
raw patch · 4 files changed
+40/−7 lines, 4 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ Autodocodec.OpenAPI.DerivingVia.NonOrphan: AutodocodecOpenApi :: a -> AutodocodecOpenApi a
+ Autodocodec.OpenAPI.DerivingVia.NonOrphan: [unAutodocodecSwagger] :: AutodocodecOpenApi a -> a
+ Autodocodec.OpenAPI.DerivingVia.NonOrphan: instance (Data.Typeable.Internal.Typeable a, Autodocodec.Class.HasCodec a) => Data.OpenApi.Internal.Schema.ToSchema (Autodocodec.OpenAPI.DerivingVia.NonOrphan.AutodocodecOpenApi a)
+ Autodocodec.OpenAPI.DerivingVia.NonOrphan: newtype AutodocodecOpenApi a
Files
- CHANGELOG.md +4/−0
- autodocodec-openapi3.cabal +2/−1
- src/Autodocodec/OpenAPI/DerivingVia.hs +16/−6
- src/Autodocodec/OpenAPI/DerivingVia/NonOrphan.hs +18/−0
CHANGELOG.md view
@@ -1,5 +1,9 @@ # Changelog +## [0.2.1.4] - 2024-07-29++* Non-orphan version of the `ToSchema` deriving.+ ## [0.2.1.3] - 2024-07-26 * Support for `autodocodec >=0.4`.
autodocodec-openapi3.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: autodocodec-openapi3-version: 0.2.1.3+version: 0.2.1.4 synopsis: Autodocodec interpreters for openapi3 homepage: https://github.com/NorfairKing/autodocodec#readme bug-reports: https://github.com/NorfairKing/autodocodec/issues@@ -27,6 +27,7 @@ exposed-modules: Autodocodec.OpenAPI Autodocodec.OpenAPI.DerivingVia+ Autodocodec.OpenAPI.DerivingVia.NonOrphan Autodocodec.OpenAPI.Schema other-modules: Paths_autodocodec_openapi3
src/Autodocodec/OpenAPI/DerivingVia.hs view
@@ -3,14 +3,24 @@ module Autodocodec.OpenAPI.DerivingVia where -import Autodocodec-import Autodocodec.OpenAPI.Schema-import Data.OpenApi as OpenAPI-import Data.Proxy-import Data.Typeable+import Autodocodec (Autodocodec, HasCodec)+import Autodocodec.OpenAPI.Schema (declareNamedSchemaViaCodec)+import qualified Data.OpenApi as OpenAPI+import Data.Proxy (Proxy (Proxy))+import Data.Typeable (Typeable) -- | An instance for 'Autodocodec' that lets you use 'DerivingVia' to derive 'OpenAPI.ToSchema' if your type has a 'HasCodec' instance. -- -- > deriving (OpenAPI.ToSchema) via (Autodocodec FooBar) instance (Typeable a, HasCodec a) => OpenAPI.ToSchema (Autodocodec a) where- declareNamedSchema (Proxy :: Proxy (Autodocodec a)) = declareNamedSchemaViaCodec (Proxy :: Proxy a)+ -- This is declared like this as because now 'declareNamedSchema' takes no arguments, it can be memoized (like a top level variable is).+ -- As a result, the result of the 'let', that is the schema, should also be memoized,+ -- so with this definition schema in 'declaredNamedSchema' should only need to be calculated once IF the instance is of the form:+ -- > deriving (OpenAPI.ToSchema) via (Autodocodec FooBar)+ -- where FooBar is a concrete type.+ -- If the instance is of the form:+ -- > deriving via (Autodocodec (FooBar a)) instance (OpenAPI.ToSchema (FooBar a))+ -- this memoisation trick probably won't work (as 'declaredNamedSchema' actually is a function due to hiddent typeclass dictionary arguments)+ -- but it shouldn't hurt to try. See:+ -- https://stackoverflow.com/questions/77056264/caching-an-expensive-to-compute-result-in-a-class-instance+ declareNamedSchema = let schema = declareNamedSchemaViaCodec (Proxy :: Proxy a) in const schema
+ src/Autodocodec/OpenAPI/DerivingVia/NonOrphan.hs view
@@ -0,0 +1,18 @@+{-# LANGUAGE ScopedTypeVariables #-}++module Autodocodec.OpenAPI.DerivingVia.NonOrphan where++import Autodocodec.Class (HasCodec)+import Autodocodec.OpenAPI.Schema (declareNamedSchemaViaCodec)+import qualified Data.OpenApi as OpenAPI+import Data.Proxy (Proxy (Proxy))+import Data.Typeable (Typeable)++newtype AutodocodecOpenApi a = AutodocodecOpenApi {unAutodocodecSwagger :: a}++-- | An instance for 'Autodocodec' that lets you use 'DerivingVia' to derive 'OpenAPI.ToSchema' if your type has a 'HasCodec' instance.+--+-- > deriving (OpenAPI.ToSchema) via (Autodocodec FooBar)+instance (Typeable a, HasCodec a) => OpenAPI.ToSchema (AutodocodecOpenApi a) where+ -- See comments in 'Autodocodec.OpenAPI.DerivingVia' for the reason why this is defined like this.+ declareNamedSchema = let schema = declareNamedSchemaViaCodec (Proxy :: Proxy a) in const schema