packages feed

highjson 0.4.0.0 → 0.5.0.0

raw patch · 3 files changed

+14/−13 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Data.HighJson: data (:&) a b
- Data.HighJson: instance (Data.HighJson.IsDataSpec x, Data.HighJson.IsDataSpec y, Data.HighJson.DType x ~ Data.HighJson.DType y, Data.HighJson.DContainer x ~ Data.HighJson.DContainer y, Data.HighJson.CombinableContainer (Data.HighJson.DContainer x)) => Data.HighJson.IsDataSpec (x Data.HighJson.:& y)
- Data.HighJson: instance (GHC.Classes.Eq b, GHC.Classes.Eq a) => GHC.Classes.Eq (a Data.HighJson.:& b)
- Data.HighJson: instance (GHC.Enum.Bounded b, GHC.Enum.Bounded a) => GHC.Enum.Bounded (a Data.HighJson.:& b)
- Data.HighJson: instance (GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (a Data.HighJson.:& b)
+ Data.HighJson: data a :& b
+ Data.HighJson: infixr 5 :|:
+ Data.HighJson: infixr 8 :&
+ Data.HighJson: instance (Data.HighJson.IsDataSpec x, Data.HighJson.IsDataSpec y, Data.HighJson.DType x GHC.Types.~ Data.HighJson.DType y, Data.HighJson.DContainer x GHC.Types.~ Data.HighJson.DContainer y, Data.HighJson.CombinableContainer (Data.HighJson.DContainer x)) => Data.HighJson.IsDataSpec (x Data.HighJson.:& y)
+ Data.HighJson: instance (GHC.Base.Semigroup a, GHC.Base.Semigroup b) => GHC.Base.Semigroup (a Data.HighJson.:& b)
+ Data.HighJson: instance (GHC.Classes.Eq a, GHC.Classes.Eq b) => GHC.Classes.Eq (a Data.HighJson.:& b)
+ Data.HighJson: instance (GHC.Enum.Bounded a, GHC.Enum.Bounded b) => GHC.Enum.Bounded (a Data.HighJson.:& b)
+ Data.HighJson: instance (GHC.Show.Show a, GHC.Show.Show b) => GHC.Show.Show (a Data.HighJson.:& b)
- Data.HighJson: EnumOption :: !Text -> !(Prism' t ()) -> EnumOption t
+ Data.HighJson: EnumOption :: !Text -> !Prism' t () -> EnumOption t
- Data.HighJson: HighSpec :: !Text -> !(Maybe Text) -> !(BodySpec ty a as) -> HighSpec a as
+ Data.HighJson: HighSpec :: !Text -> !Maybe Text -> !BodySpec ty a as -> HighSpec a (ty :: SpecType) as
- Data.HighJson: PhantomEnumContainer :: [EnumOption t] -> PhantomEnumContainer t
+ Data.HighJson: PhantomEnumContainer :: [EnumOption t] -> PhantomEnumContainer t (ts :: [*])
- Data.HighJson: RecordField :: !Text -> !Bool -> (Object -> Text -> Parser f) -> !(t -> f) -> RecordField t f
+ Data.HighJson: RecordField :: !Text -> !Bool -> (Object -> Text -> Parser f) -> !t -> f -> RecordField t f
- Data.HighJson: SumOption :: !Text -> !(Prism' t o) -> SumOption t o
+ Data.HighJson: SumOption :: !Text -> !Prism' t o -> SumOption t o
- Data.HighJson: [BodySpecEnum] :: !(EnumSpec a) -> BodySpec SpecEnum a as
+ Data.HighJson: [BodySpecEnum] :: !EnumSpec a -> BodySpec 'SpecEnum a as
- Data.HighJson: [BodySpecRecord] :: !(RecordSpec a as) -> BodySpec SpecRecord a as
+ Data.HighJson: [BodySpecRecord] :: !RecordSpec a as -> BodySpec 'SpecRecord a as
- Data.HighJson: [BodySpecSum] :: !(SumSpec a as) -> BodySpec SpecSum a as
+ Data.HighJson: [BodySpecSum] :: !SumSpec a as -> BodySpec 'SpecSum a as
- Data.HighJson: [eo_prism] :: EnumOption t -> !(Prism' t ())
+ Data.HighJson: [eo_prism] :: EnumOption t -> !Prism' t ()
- Data.HighJson: [hs_bodySpec] :: HighSpec a as -> !(BodySpec ty a as)
+ Data.HighJson: [hs_bodySpec] :: HighSpec a (ty :: SpecType) as -> !BodySpec ty a as
- Data.HighJson: [hs_description] :: HighSpec a as -> !(Maybe Text)
+ Data.HighJson: [hs_description] :: HighSpec a (ty :: SpecType) as -> !Maybe Text
- Data.HighJson: [hs_name] :: HighSpec a as -> !Text
+ Data.HighJson: [hs_name] :: HighSpec a (ty :: SpecType) as -> !Text
- Data.HighJson: [rf_get] :: RecordField t f -> !(t -> f)
+ Data.HighJson: [rf_get] :: RecordField t f -> !t -> f
- Data.HighJson: [so_prism] :: SumOption t o -> !(Prism' t o)
+ Data.HighJson: [so_prism] :: SumOption t o -> !Prism' t o
- Data.HighJson: [unPhantomEnumContainer] :: PhantomEnumContainer t -> [EnumOption t]
+ Data.HighJson: [unPhantomEnumContainer] :: PhantomEnumContainer t (ts :: [*]) -> [EnumOption t]
- Data.HighJson: class IsDataSpec t where type DFields t :: [*] type DType t type DContainer t :: * -> [*] -> * where {
+ Data.HighJson: class IsDataSpec t where {
- Data.HighJson: compileRec :: IsDataSpec t => t -> (DContainer t) (DType t) (DFields t)
+ Data.HighJson: compileRec :: IsDataSpec t => t -> DContainer t (DType t) (DFields t)
- Data.HighJson: type EnumTypeSpec t flds = HighSpec t SpecEnum flds
+ Data.HighJson: type EnumTypeSpec t flds = HighSpec t 'SpecEnum flds
- Data.HighJson: type RecordTypeSpec t flds = HighSpec t SpecRecord flds
+ Data.HighJson: type RecordTypeSpec t flds = HighSpec t 'SpecRecord flds
- Data.HighJson: type SumTypeSpec t flds = HighSpec t SpecSum flds
+ Data.HighJson: type SumTypeSpec t flds = HighSpec t 'SpecSum flds

Files

highjson.cabal view
@@ -1,5 +1,5 @@ name:                highjson-version:             0.4.0.0+version:             0.5.0.0 synopsis:            Spec based JSON parsing/serialisation description:         Low boilerplate, easy to use and very fast JSON serialisation and parsing without generics or TemplateHaskell homepage:            https://github.com/agrafix/highjson@@ -8,7 +8,7 @@ license-file:        LICENSE author:              Alexander Thiemann <mail@athiemann.net> maintainer:          Alexander Thiemann <mail@athiemann.net>-copyright:           (c) 2015 - 2017 Alexander Thiemann+copyright:           (c) 2015 - 2021 Alexander Thiemann category:            Text, Web, JSON build-type:          Simple stability:           experimental
src/Data/HighJson.hs view
@@ -46,9 +46,11 @@     deriving (Typeable, Eq, Show, Functor, Traversable, Foldable, Bounded) infixr 8 :& +instance (Semigroup a, Semigroup b) => Semigroup (a :& b) where+    (a :& b) <> (a' :& b') = (a <> a') :& (b <> b')+ instance (Monoid a, Monoid b) => Monoid (a :& b) where     mempty = mempty :& mempty-    (a :& b) `mappend` (a' :& b') = (a `mappend` a') :& (b `mappend` b')  -- | A monoidal type class that respects type level lists associated to the bodies class CombinableContainer t where
src/Data/HighJson/Types.hs view
@@ -16,11 +16,9 @@  import Control.Applicative import Control.Lens hiding ((.=))-import Control.Monad import Data.Aeson import Data.Aeson.Types hiding (parse) import Data.HVect-import Data.Monoid import qualified Data.Text as T  data SpecType@@ -93,20 +91,21 @@     case hs_bodySpec hs of       BodySpecSum s -> object $ fst $ jsonSerSum s val       BodySpecRecord r -> object $ fst $ jsonSerRec r val-      BodySpecEnum e -> toJSON $ jsonSerEnum e val+      BodySpecEnum e -> toJSON $ jsonSerEnum (hs_name hs) e val  jsonEncoder :: AllHave ToJSON as => HighSpec a ty as -> a -> Encoding jsonEncoder hs val =     case hs_bodySpec hs of       BodySpecSum s -> pairs $ snd $ jsonSerSum s val       BodySpecRecord r -> pairs $ snd $ jsonSerRec r val-      BodySpecEnum e -> toEncoding $ jsonSerEnum e val+      BodySpecEnum e -> toEncoding $ jsonSerEnum (hs_name hs) e val -jsonSerEnum :: EnumSpec a -> a -> T.Text-jsonSerEnum (EnumSpec opts) val =+jsonSerEnum :: T.Text -> EnumSpec a -> a -> T.Text+jsonSerEnum enumName (EnumSpec opts) val =     loop opts     where-      loop [] = error "Empty enum spec"+      loop [] =+          error $ "Empty enum spec for " <> T.unpack enumName <> ". Did you mention all cases?"       loop (x : xs) =           case val ^? eo_prism x of             Just () -> eo_jsonKey x@@ -142,7 +141,7 @@             f :+: fs ->                 let pair = (rf_jsonKey f, toJSON $ rf_get f val)                     encoder = rf_jsonKey f .= rf_get f val-                in loop fs ((pair : ps), encoder <> encoding)+                in loop fs (pair : ps, encoder <> encoding)  jsonParser :: AllHave FromJSON as => HighSpec a ty as -> Value -> Parser a jsonParser hs =@@ -181,11 +180,11 @@                 "Failed to parse as " ++ T.unpack name             o :|: os ->                 let parse =-                        liftM (so_prism o #) $ obj .: so_jsonKey o+                        fmap (so_prism o #) $ obj .: so_jsonKey o                 in parse <|> loop os  -jsonParserEnum :: Monad m => T.Text -> EnumSpec a -> T.Text -> m a+jsonParserEnum :: (MonadFail m, Monad m) => T.Text -> EnumSpec a -> T.Text -> m a jsonParserEnum name (EnumSpec sopts) t =     loop sopts     where