json-query 0.2.3.1 → 0.3.0.0
raw patch · 9 files changed
+45/−38 lines, 9 filesdep −array-chunksdep ~bytebuilddep ~json-syntaxdep ~textsetup-changed
Dependencies removed: array-chunks
Dependency ranges changed: bytebuild, json-syntax, text, text-short
Files
- CHANGELOG.md +4/−0
- Setup.hs +0/−2
- json-query.cabal +18/−17
- src/Json/Arrow.hs +7/−6
- src/Json/Context.hs +2/−1
- src/Json/Error.hs +3/−2
- src/Json/Parser.hs +5/−5
- src/Json/Path.hs +3/−2
- test/DogHouse.hs +3/−3
CHANGELOG.md view
@@ -1,5 +1,9 @@ # Revision history for json-query +## 0.3.0.0 -- 2025-07-14++* Update to work with json-syntax+ ## 0.2.3.1 -- 2024-01-29 * Update package metadata.
− Setup.hs
@@ -1,2 +0,0 @@-import Distribution.Simple-main = defaultMain
json-query.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.4 name: json-query-version: 0.2.3.1+version: 0.3.0.0 synopsis: Kitchen sink for querying JSON description: The library complements json-syntax by making available several@@ -8,7 +8,7 @@ only query JSON. They do not update it. homepage: https://github.com/byteverse/json-query-bug-reports: https://github.com/byteverse/json-query+bug-reports: https://github.com/byteverse/json-query/issues license: BSD-3-Clause license-file: LICENSE author: Andrew Martin@@ -17,8 +17,14 @@ category: Data build-type: Simple extra-doc-files: CHANGELOG.md+tested-with: GHC ==9.6.3 || ==9.8.1 +common build-settings+ default-language: Haskell2010+ ghc-options: -Wall -Wunused-packages+ library+ import: build-settings exposed-modules: Json.Arrow Json.Context@@ -28,38 +34,34 @@ Json.Path build-depends:- , array-chunks >=0.1.2 && <0.2 , base >=4.12 && <5 , bytebuild >=0.3.5 && <0.4 , bytestring >=0.10 && <0.12 , contiguous >=0.6.4 && <0.7- , json-syntax >=0.2.2 && <0.3+ , json-syntax >=0.3 && <0.4 , primitive >=0.7 && <0.10- , primitive-unlifted >=0.1.3 && <2.2+ , primitive-unlifted >=0.1.3 && <2.3 , profunctors >=5.6.2 && <5.7 , scientific-notation >=0.1.5 && <0.2- , text-short >=0.1.3 && <0.2+ , text >=2.1.2+ , text-short >=0.1.5 , transformers >=0.5.6 && <0.7 - hs-source-dirs: src- default-language: Haskell2010- ghc-options: -Wall -O2+ hs-source-dirs: src+ ghc-options: -O2 test-suite test- default-language: Haskell2010- type: exitcode-stdio-1.0- hs-source-dirs: test- main-is: Main.hs+ import: build-settings+ type: exitcode-stdio-1.0+ hs-source-dirs: test+ main-is: Main.hs other-modules: Arrowy DogHouse Monadic - ghc-options: -Wall -O2 build-depends:- , array-chunks , base >=4.12.0.0 && <5- , bytebuild , byteslice >=0.1.3 , bytestring , hspec >=2.11.7@@ -72,7 +74,6 @@ , tasty-hspec >=1.2.0.4 , tasty-hunit >=0.10.0.2 , text >=1.2- , text-short source-repository head type: git
src/Json/Arrow.hs view
@@ -59,6 +59,7 @@ import Data.Primitive (SmallArray) import Data.Primitive.Unlifted.Array (UnliftedArray) import Data.Profunctor (Profunctor (..))+import Data.Text (Text) import Data.Text.Short (ShortText) import Data.Word (Word16, Word64) import Json (Member (Member), Value (Array, Number, Object, String))@@ -94,7 +95,7 @@ Array membs -> Right (ctx, Elements membs) _ -> Left (Errors.singleton (Error "expected array" ctx)) -string :: Value ~> ShortText+string :: Value ~> Text string = P $ \ctx v -> case v of String str -> Right (ctx, str) _ -> Left (Errors.singleton (Error "expected string" ctx))@@ -106,7 +107,7 @@ Failure context includes the index of non-string value if any values in the array are not strings. -}-strings :: Value ~> UnliftedArray ShortText+strings :: Value ~> SmallArray Text strings = P $ \ctx v -> case v of Array membs -> runST $ runExceptT $ do xs <-@@ -137,7 +138,7 @@ newtype Members = Members {unMembers :: SmallArray Member} -member :: ShortText -> Members ~> Value+member :: Text -> Members ~> Value member k = P $ \ctx xs -> case find keyEq (unMembers xs) of Just Member {value} -> Right (Key k ctx, value) Nothing -> Left (Errors.singleton (Error ("key not found: " <> k) ctx))@@ -145,7 +146,7 @@ keyEq Member {key} = k == key -- | An optional member. Returns Nothing if the value is missing.-memberOpt :: ShortText -> Members ~> Maybe Value+memberOpt :: Text -> Members ~> Maybe Value memberOpt k = P $ \ctx xs -> case find keyEq (unMembers xs) of Just Member {value} -> Right (Key k ctx, Just value) Nothing -> Right (ctx, Nothing)@@ -248,7 +249,7 @@ instance ArrowApply Parser where app = P $ \ctx (p, x) -> unParser p ctx x -fail :: ShortText -> a ~> b+fail :: Text -> a ~> b fail msg = P $ \ctx _ -> Left (Errors.singleton (Error msg ctx)) failZero :: a ~> b@@ -256,7 +257,7 @@ liftMaybe :: -- | Message to display on decode error- ShortText ->+ Text -> -- | Decode function (a -> Maybe b) -> a ~> b
src/Json/Context.hs view
@@ -11,6 +11,7 @@ ) where import Data.Bytes.Builder (Builder)+import Data.Text (Text) import Data.Text.Short (ShortText) import Json.Path (Path) @@ -26,7 +27,7 @@ -} data Context = Top- | Key !ShortText !Context+ | Key {-# UNPACK #-} !Text !Context | Index !Int !Context deriving (Eq, Show)
src/Json/Error.hs view
@@ -13,6 +13,7 @@ import Data.ByteString.Short.Internal (ShortByteString (SBS)) import Data.Bytes.Builder (Builder) import Data.Text.Short (ShortText)+import Data.Text (Text) import Json.Context (Context (..)) import qualified Data.Bytes.Builder as Builder@@ -23,7 +24,7 @@ -- | A single error message. data Error = Error- { message :: !ShortText+ { message :: {-# UNPACK #-} !Text , context :: !Context } deriving (Eq, Show)@@ -39,4 +40,4 @@ builderUtf8 Error {message, context} = Context.builderUtf8 context <> Builder.ascii2 ':' ' '- <> Builder.shortTextUtf8 message+ <> Builder.textUtf8 message
src/Json/Parser.hs view
@@ -58,7 +58,7 @@ import Data.List (find) import Data.Number.Scientific (Scientific) import Data.Primitive (SmallArray)-import Data.Text.Short (ShortText)+import Data.Text (Text) import Data.Word (Word16, Word32, Word64) import Json (Member (Member), Value (Array, Number, Object)) @@ -127,7 +127,7 @@ Right a -> Right a Left e -> Left e -fail :: ShortText -> Parser a+fail :: Text -> Parser a fail !msg = Parser (\e -> Left (Errors.singleton Error {context = e, message = msg})) object :: Value -> Parser (SmallArray Member)@@ -148,7 +148,7 @@ Number n -> pure n _ -> fail "expected number" -string :: Value -> Parser ShortText+string :: Value -> Parser Text string = \case Json.String n -> pure n _ -> fail "expected string"@@ -187,7 +187,7 @@ -- members :: Parser Value (Chunks Member) -- members = _ -key :: ShortText -> (Value -> Parser a) -> MemberParser a+key :: Text -> (Value -> Parser a) -> MemberParser a key !name f = MemberParser $ \p mbrs -> let !p' = Key name p in case find (\Member {key = k} -> k == name) mbrs of@@ -199,7 +199,7 @@ that there is no distinction between @null@ and an absent value in the encoding scheme. -}-keyOptNull :: ShortText -> (Value -> Parser a) -> MemberParser a+keyOptNull :: Text -> (Value -> Parser a) -> MemberParser a keyOptNull !name f = MemberParser $ \p mbrs -> let !p' = Key name p val = case find (\Member {key = k} -> k == name) mbrs of
src/Json/Path.hs view
@@ -23,6 +23,7 @@ import Data.Bytes.Builder (Builder) import Data.Primitive (ByteArray (ByteArray)) import Data.Text.Short (ShortText)+import Data.Text (Text) import Json (Member (Member), Value (Array, Null, Object)) import qualified Data.Bytes.Builder as Builder@@ -33,7 +34,7 @@ -- | A path to an object. data Path = -- | JSON path element of a key into an object, \"object.key\".- Key {-# UNPACK #-} !ShortText !Path+ Key {-# UNPACK #-} !Text !Path | -- | JSON path element of an index into an array, \"array[index]\". -- Negative numbers result in undefined behavior. Index {-# UNPACK #-} !Int !Path@@ -51,7 +52,7 @@ builderUtf8 p0 = Builder.ascii '$' <> go p0 where go Nil = mempty- go (Key k p) = Builder.ascii '.' <> Builder.shortTextUtf8 k <> go p+ go (Key k p) = Builder.ascii '.' <> Builder.textUtf8 k <> go p go (Index i p) = Builder.ascii '[' <> Builder.wordDec (fromIntegral i)
test/DogHouse.hs view
@@ -15,7 +15,7 @@ import Data.Bytes (Bytes) import Data.Primitive (ByteArray, SmallArray) import Data.Text.Encoding (encodeUtf8)-import Data.Text.Short (ShortText)+import Data.Text (Text) import NeatInterpolation (text) import qualified Data.ByteString.Short as SBS@@ -24,13 +24,13 @@ import qualified GHC.Exts as Exts data House = House- { address :: !ShortText+ { address :: {-# UNPACK #-} !Text , dogs :: !(SmallArray Dog) } deriving (Eq, Show) data Dog = Dog- { name :: !ShortText+ { name :: {-# UNPACK #-} !Text , age :: !Int , alive :: !Bool }