json-spec-elm 0.5.0.3 → 0.6.0.0
raw patch · 3 files changed
+36/−15 lines, 3 filesdep ~json-specPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: json-spec
API changes (from Hackage documentation)
+ Data.JsonSpec.Elm: instance Data.JsonSpec.Elm.HasType spec => Data.JsonSpec.Elm.HasType ('Data.JsonSpec.Spec.JsonDict spec)
Files
- changelog.md +6/−0
- json-spec-elm.cabal +2/−2
- src/Data/JsonSpec/Elm.hs +28/−13
changelog.md view
@@ -1,5 +1,11 @@ # Changelog +## 0.6.0.0++- Support `JsonDict` from `json-spec` 1.4, generating Elm `Dict`+ encoders and decoders.+- Require `json-spec` >= 1.4.0.0.+ ## 0.5.0.3 - Refresh dependency freeze and allow `containers` 0.8.
json-spec-elm.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: json-spec-elm-version: 0.5.0.3+version: 0.6.0.0 synopsis: Elm code generate for `json-spec`. description: Produce elm types, encoders, and decoders from a@@ -25,7 +25,7 @@ , base >= 4.19.2.0 && < 4.23 , containers >= 0.6.8 && < 0.9 , elm-syntax >= 0.3.3.0 && < 0.4- , json-spec >= 1.3.0.0 && < 1.4+ , json-spec >= 1.4.0.0 && < 1.5 , text >= 2.1.1 && < 2.2 common warnings
src/Data/JsonSpec/Elm.hs view
@@ -101,28 +101,34 @@ Named, ) where - import Bound (Scope(Scope), Var(B), abstract1, closed, toScope)-import Control.Monad.Writer (MonadTrans(lift), MonadWriter(tell),- Writer, execWriter)-import Data.JsonSpec (FieldSpec(Optional, Required),- Specification(JsonArray, JsonBool, JsonDateTime, JsonEither, JsonInt,- JsonLet, JsonNullable, JsonNum, JsonObject, JsonRef, JsonString,- JsonTag))+import Control.Monad.Writer+ ( MonadTrans(lift), MonadWriter(tell), Writer, execWriter+ )+import Data.JsonSpec+ ( FieldSpec(Optional, Required)+ , Specification+ ( JsonArray, JsonBool, JsonDateTime, JsonDict, JsonEither, JsonInt, JsonLet+ , JsonNullable, JsonNum, JsonObject, JsonRef, JsonString, JsonTag+ )+ ) import Data.Proxy (Proxy(Proxy)) import Data.Set (Set) import Data.String (IsString(fromString)) import Data.Text (Text) import Data.Void (Void, absurd)-import GHC.TypeLits (ErrorMessage((:$$:), (:<>:)), KnownSymbol, Symbol,- TypeError, symbolVal)+import GHC.TypeLits+ ( ErrorMessage((:$$:), (:<>:)), KnownSymbol, Symbol, TypeError, symbolVal+ ) import Language.Elm.Definition (Definition) import Language.Elm.Expression ((|>), Expression, if_) import Language.Elm.Name (Constructor, Qualified) import Language.Elm.Type (Type)-import Prelude (Applicative(pure), Bool(False, True), Foldable(foldl,- foldr), Functor(fmap), Maybe(Just, Nothing), Monad((>>)),- Semigroup((<>)), Show(show), ($), (++), (.), (<$>), Int, error, zip)+import Prelude+ ( Applicative(pure), Bool(False, True), Foldable(foldl, foldr), Functor(fmap)+ , Maybe(Just, Nothing), Monad((>>)), Semigroup((<>)), Show(show), ($), (++)+ , (.), (<$>), Int, error, zip+ ) import qualified Data.Char as Char import qualified Data.Set as Set import qualified Data.Text as Text@@ -133,7 +139,6 @@ import qualified Language.Elm.Pattern as Pat import qualified Language.Elm.Type as Type - {-| Generate Elm type, encoder, and decoder 'Definition's for all /named/ types in a 'Specification'. Note that this will not produce any types,@@ -356,6 +361,16 @@ encoderOf = do encoder <- encoderOf @spec pure $ "Json.Encode.list" `a` encoder+instance (HasType spec) => HasType (JsonDict spec) where+ typeOf = do+ elemType <- typeOf @spec+ pure $ "Dict.Dict" `ta` "String.String" `ta` elemType+ decoderOf = do+ dec <- decoderOf @spec+ pure $ "Json.Decode.dict" `a` dec+ encoderOf = do+ encoder <- encoderOf @spec+ pure $ "Json.Encode.dict" `a` "Basics.identity" `a` encoder instance HasType JsonBool where typeOf = pure "Basics.Bool" decoderOf = pure "Json.Decode.bool"