json-encoder 0.1.3.1 → 0.1.5
raw patch · 5 files changed
+22/−90 lines, 5 filesdep +semigroupsdep −basedep ~base-preludedep ~bytestring-tree-builderPVP ok
version bump matches the API change (PVP)
Dependencies added: semigroups
Dependencies removed: base
Dependency ranges changed: base-prelude, bytestring-tree-builder
API changes (from Hackage documentation)
+ JSONEncoder: instance Data.Semigroup.Semigroup (JSONEncoder.Hetero a)
+ JSONEncoder: instance Data.Semigroup.Semigroup (JSONEncoder.Object a)
Files
- json-encoder.cabal +6/−7
- library/JSONEncoder.hs +11/−7
- library/JSONEncoder/Builders.hs +0/−11
- library/JSONEncoder/ByteStrings.hs +0/−60
- library/JSONEncoder/Prelude.hs +5/−5
json-encoder.cabal view
@@ -1,9 +1,9 @@ name: json-encoder version:- 0.1.3.1+ 0.1.5 synopsis:- A very fast single-pass JSON encoder with a declarative DSL+ A direct-to-bytes single-pass JSON encoder with a declarative DSL description: category: JSON, Codec@@ -38,24 +38,23 @@ hs-source-dirs: library default-extensions:- Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples+ Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples default-language: Haskell2010 other-modules: JSONEncoder.Prelude JSONEncoder.Builders- JSONEncoder.ByteStrings exposed-modules: JSONEncoder build-depends: -- text == 1.*, bytestring >= 0.10 && < 0.11,- bytestring-tree-builder >= 0.2.2.1 && < 0.3,+ bytestring-tree-builder >= 0.2.4 && < 0.3, scientific >= 0.3 && < 0.4, -- contravariant-extras == 0.3.*, contravariant >= 1.3 && < 2,+ semigroups >= 0.18 && < 0.19, -- - base-prelude >= 0.1.19 && < 0.2,- base >= 4.6 && < 5+ base-prelude >= 0.1.21 && < 0.2
library/JSONEncoder.hs view
@@ -25,12 +25,12 @@ where import JSONEncoder.Prelude hiding (length, null)-import ByteString.TreeBuilder+import qualified ByteString.TreeBuilder as Builders import qualified JSONEncoder.Builders as Builders import qualified Data.Scientific -run :: Value a -> a -> Builder+run :: Value a -> a -> Builders.Builder run (Value (Op producer)) input = producer input @@ -39,7 +39,7 @@ ------------------------- newtype Value a =- Value (Op Builder a)+ Value (Op Builders.Builder a) deriving (Contravariant, Divisible, Decidable) null :: Value ()@@ -57,7 +57,7 @@ number_integral :: Integral a => Value a number_integral = Value $ Op $- fromString . show . toInteger+ Builders.asciiIntegral number_scientific :: Value Data.Scientific.Scientific number_scientific =@@ -92,7 +92,7 @@ ------------------------- newtype Object a =- Object (Op Builder a)+ Object (Op Builders.Builder a) deriving (Contravariant) instance Divisible Object where@@ -115,6 +115,8 @@ mappend (Object (Op producer1)) (Object (Op producer2)) = Object (Op (Builders.appendWithIncut (Builders.asciiChar ',') <$> producer1 <*> producer2)) +instance Semigroup (Object a)+ field :: Text -> Value a -> Object a field name (Value (Op producer)) = Object $ Op $ @@ -127,7 +129,7 @@ ------------------------- newtype Array a =- Array (Op Builder a)+ Array (Op Builders.Builder a) deriving (Contravariant) -- |@@ -154,7 +156,7 @@ ------------------------- newtype Hetero a =- Hetero (Op Builder a)+ Hetero (Op Builders.Builder a) deriving (Contravariant) instance Divisible Hetero where@@ -176,6 +178,8 @@ Hetero (Op (const mempty)) mappend (Hetero (Op producer1)) (Hetero (Op producer2)) = Hetero (Op (Builders.appendWithIncut (Builders.asciiChar ',') <$> producer1 <*> producer2))++instance Semigroup (Hetero a) element :: Value a -> Hetero a element (Value op) =
library/JSONEncoder/Builders.hs view
@@ -2,7 +2,6 @@ import JSONEncoder.Prelude hiding (length) import ByteString.TreeBuilder-import qualified JSONEncoder.ByteStrings as ByteStrings import qualified Data.Text @@ -19,16 +18,6 @@ else if length b == 0 then a else a <> incut <> b--{-# INLINE asciiChar #-}-asciiChar :: Char -> Builder-asciiChar =- byte . fromIntegral . ord--{-# INLINE utf8Char #-}-utf8Char :: Char -> Builder-utf8Char =- byteString . ByteStrings.utf8Char {-# INLINABLE stringEncodedChar #-} stringEncodedChar :: Char -> Builder
− library/JSONEncoder/ByteStrings.hs
@@ -1,60 +0,0 @@-module JSONEncoder.ByteStrings where--import JSONEncoder.Prelude-import Foreign-import qualified Data.ByteString.Internal as C---{-# INLINE utf8Char #-}-utf8Char :: Char -> ByteString-utf8Char =- utf8Ord . ord--{-# INLINE utf8Ord #-}-utf8Ord :: Int -> ByteString-utf8Ord x =- if- | x <= 0x7F ->- bytes1 (fromIntegral x)- | x <= 0x07FF ->- bytes2 (fromIntegral ((x `shiftR` 6) + 0xC0))- (fromIntegral ((x .&. 0x3F) + 0x80))- | x <= 0xFFFF ->- bytes3 (fromIntegral (x `shiftR` 12) + 0xE0)- (fromIntegral ((x `shiftR` 6) .&. 0x3F) + 0x80)- (fromIntegral (x .&. 0x3F) + 0x80)- | otherwise ->- bytes4 (fromIntegral (x `shiftR` 18) + 0xF0)- (fromIntegral ((x `shiftR` 12) .&. 0x3F) + 0x80)- (fromIntegral ((x `shiftR` 6) .&. 0x3F) + 0x80)- (fromIntegral (x .&. 0x3F) + 0x80)--{-# INLINE bytes1 #-}-bytes1 :: Word8 -> ByteString-bytes1 byte1 =- C.unsafeCreate 1 $ \ptr -> do- pokeByteOff ptr 0 byte1--{-# INLINE bytes2 #-}-bytes2 :: Word8 -> Word8 -> ByteString-bytes2 byte1 byte2 =- C.unsafeCreate 2 $ \ptr -> do- pokeByteOff ptr 0 byte1- pokeByteOff ptr 1 byte2--{-# INLINE bytes3 #-}-bytes3 :: Word8 -> Word8 -> Word8 -> ByteString-bytes3 byte1 byte2 byte3 =- C.unsafeCreate 3 $ \ptr -> do- pokeByteOff ptr 0 byte1- pokeByteOff ptr 1 byte2- pokeByteOff ptr 2 byte3--{-# INLINE bytes4 #-}-bytes4 :: Word8 -> Word8 -> Word8 -> Word8 -> ByteString-bytes4 byte1 byte2 byte3 byte4 =- C.unsafeCreate 4 $ \ptr -> do- pokeByteOff ptr 0 byte1- pokeByteOff ptr 1 byte2- pokeByteOff ptr 2 byte3- pokeByteOff ptr 3 byte4
library/JSONEncoder/Prelude.hs view
@@ -4,13 +4,9 @@ ) where --- base---------------------------import Numeric as Exports- -- base-prelude --------------------------import BasePrelude as Exports hiding (fail, Alt)+import BasePrelude as Exports hiding (fail, Alt, (<>), First(..), Last(..)) -- contravariant -------------------------@@ -20,6 +16,10 @@ -- contravariant-extras ------------------------- import Contravariant.Extras as Exports++-- semigroups+-------------------------+import Data.Semigroup as Exports -- text -------------------------