data-object-json 0.0.0.1 → 0.3.0
raw patch · 2 files changed
+102/−99 lines, 2 filesdep +JSONbdep +failuredep +textdep −attemptdep −json-bdep −sybdep ~convertible-textdep ~data-objectPVP ok
version bump matches the API change (PVP)
Dependencies added: JSONb, failure, text
Dependencies removed: attempt, json-b, syb
Dependency ranges changed: convertible-text, data-object
API changes (from Hackage documentation)
- Data.Object.Json: JsonDecodeError :: String -> JsonDecodeError
- Data.Object.Json: JsonDoc :: ByteString -> JsonDoc
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object ByteString ByteString)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object ByteString String)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object ByteString Text)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object String ByteString)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object String JsonScalar)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object String String)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object String Text)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object Text ByteString)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object Text JsonScalar)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object Text String)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object Text Text)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) ByteString
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) JsonScalar
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) String
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) Text
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(ByteString, ByteString)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(ByteString, JsonScalar)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(ByteString, Object ByteString ByteString)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(ByteString, Object ByteString JsonScalar)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(ByteString, Object ByteString String)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(ByteString, Object ByteString Text)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(ByteString, String)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(ByteString, Text)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(String, ByteString)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(String, JsonScalar)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(String, Object ByteString JsonScalar)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(String, Object String ByteString)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(String, Object String JsonScalar)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(String, Object String String)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(String, Object String Text)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(String, String)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(String, Text)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(Text, ByteString)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(Text, JsonScalar)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(Text, Object ByteString JsonScalar)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(Text, Object Text ByteString)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(Text, Object Text JsonScalar)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(Text, Object Text String)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(Text, Object Text Text)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(Text, String)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(Text, Text)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [ByteString]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [JsonScalar]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object ByteString ByteString]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object ByteString JsonScalar]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object ByteString String]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object ByteString Text]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object String ByteString]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object String JsonScalar]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object String String]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object String Text]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object Text ByteString]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object Text JsonScalar]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object Text String]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object Text Text]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [String]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Text]
- Data.Object.Json: instance ConvertAttempt ByteString JsonScalar
- Data.Object.Json: instance ConvertAttempt JsonDoc JsonObject
- Data.Object.Json: instance ConvertAttempt JsonObject JSON
- Data.Object.Json: instance ConvertAttempt JsonScalar ByteString
- Data.Object.Json: instance ConvertAttempt JsonScalar String
- Data.Object.Json: instance ConvertAttempt JsonScalar Text
- Data.Object.Json: instance ConvertAttempt String JsonScalar
- Data.Object.Json: instance ConvertAttempt Text JsonScalar
- Data.Object.Json: instance ConvertSuccess (Object ByteString ByteString) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object ByteString String) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object ByteString Text) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object String ByteString) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object String JsonScalar) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object String String) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object String Text) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object Text ByteString) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object Text JsonScalar) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object Text String) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object Text Text) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess ByteString (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess ByteString JsonScalar
- Data.Object.Json: instance ConvertSuccess JSON JsonObject
- Data.Object.Json: instance ConvertSuccess JsonObject JsonDoc
- Data.Object.Json: instance ConvertSuccess JsonScalar (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess JsonScalar ByteString
- Data.Object.Json: instance ConvertSuccess JsonScalar String
- Data.Object.Json: instance ConvertSuccess JsonScalar Text
- Data.Object.Json: instance ConvertSuccess String (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess String JsonScalar
- Data.Object.Json: instance ConvertSuccess Text (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess Text JsonScalar
- Data.Object.Json: instance ConvertSuccess [(ByteString, ByteString)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(ByteString, JsonScalar)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(ByteString, Object ByteString ByteString)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(ByteString, Object ByteString JsonScalar)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(ByteString, Object ByteString String)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(ByteString, Object ByteString Text)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(ByteString, String)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(ByteString, Text)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(String, ByteString)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(String, JsonScalar)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(String, Object ByteString JsonScalar)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(String, Object String ByteString)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(String, Object String JsonScalar)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(String, Object String String)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(String, Object String Text)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(String, String)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(String, Text)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(Text, ByteString)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(Text, JsonScalar)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(Text, Object ByteString JsonScalar)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(Text, Object Text ByteString)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(Text, Object Text JsonScalar)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(Text, Object Text String)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(Text, Object Text Text)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(Text, String)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(Text, Text)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [ByteString] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [JsonScalar] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object ByteString ByteString] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object ByteString JsonScalar] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object ByteString String] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object ByteString Text] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object String ByteString] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object String JsonScalar] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object String String] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object String Text] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object Text ByteString] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object Text JsonScalar] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object Text String] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object Text Text] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [String] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Text] (Object ByteString JsonScalar)
- Data.Object.Json: instance Eq JsonDoc
- Data.Object.Json: instance Show JsonDoc
- Data.Object.Json: newtype JsonDecodeError
- Data.Object.Json: newtype JsonDoc
- Data.Object.Json: readJsonDoc :: FilePath -> IO JsonDoc
- Data.Object.Json: unJsonDoc :: JsonDoc -> ByteString
- Data.Object.Json: writeJsonDoc :: FilePath -> JsonDoc -> IO ()
+ Data.Object.Json: class (Eq a) => IsJsonScalar a
+ Data.Object.Json: decodeFile :: (Failure JsonDecodeError m) => (ConvertSuccess ByteString k) => (IsJsonScalar v) => FilePath -> IO (m (Object k v))
+ Data.Object.Json: encodeFile :: (ConvertSuccess k ByteString, IsJsonScalar v) => FilePath -> Object k v -> IO ()
+ Data.Object.Json: fromJsonScalar :: (IsJsonScalar a) => JsonScalar -> a
+ Data.Object.Json: instance Data JsonScalar
+ Data.Object.Json: instance Eq JsonScalar
+ Data.Object.Json: instance IsJsonScalar ByteString
+ Data.Object.Json: instance IsJsonScalar JsonScalar
+ Data.Object.Json: instance IsJsonScalar Text
+ Data.Object.Json: instance IsJsonScalar [Char]
+ Data.Object.Json: instance Read JsonScalar
+ Data.Object.Json: instance Show JsonScalar
+ Data.Object.Json: instance Typeable JsonScalar
+ Data.Object.Json: toJsonScalar :: (IsJsonScalar a) => a -> JsonScalar
- Data.Object.Json: decode :: (MonadFailure JsonDecodeError m) => ByteString -> m JsonObject
+ Data.Object.Json: decode :: (Failure JsonDecodeError m) => (ConvertSuccess ByteString k) => (IsJsonScalar v) => ByteString -> m (Object k v)
- Data.Object.Json: encode :: JsonObject -> ByteString
+ Data.Object.Json: encode :: (ConvertSuccess k ByteString, IsJsonScalar v) => Object k v -> ByteString
- Data.Object.Json: fromJsonObject :: (ConvertAttempt JsonObject a) => JsonObject -> Attempt a
+ Data.Object.Json: fromJsonObject :: (ConvertSuccess ByteString k) => (IsJsonScalar v) => JsonObject -> Object k v
- Data.Object.Json: toJsonObject :: (ConvertSuccess a JsonObject) => a -> JsonObject
+ Data.Object.Json: toJsonObject :: (ConvertSuccess k ByteString) => (IsJsonScalar v) => Object k v -> JsonObject
Files
- Data/Object/Json.hs +96/−93
- data-object-json.cabal +6/−6
Data/Object/Json.hs view
@@ -1,9 +1,6 @@-{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE TypeSynonymInstances #-}-{-# LANGUAGE TemplateHaskell #-} --------------------------------------------------------- -- -- Module : Data.Object.Json@@ -13,139 +10,145 @@ -- Maintainer : Michael Snoyman <michael@snoyman.com> -- Stability : Stable -- Portability : portable---------------------------------------------------------- + -- | A simple wrapper around the json-b library which presents values inside -- 'Object's. module Data.Object.Json- ( -- * Types- JsonDoc (..)- , JsonScalar (..)+ ( -- * Definition of 'JsonObject'+ JsonScalar (..) , JsonObject- -- * IO- , readJsonDoc- , writeJsonDoc- -- * Serialization- , JsonDecodeError (..)- , decode- , encode- -- * Specialization+ -- * Automatic scalar conversions+ , IsJsonScalar (..) , toJsonObject , fromJsonObject+ -- * Encoding/decoding+ , encode+ , encodeFile+ , decode+ , decodeFile ) where -import Data.Object.Text-import qualified Data.ByteString as BS-import qualified Data.ByteString.Lazy as BL+import Data.Object import qualified Data.Trie import Control.Arrow-import Control.Applicative ((<$>))-import Data.Generics+import Data.Data import Control.Exception-import Data.Attempt import Text.JSONb.Simple as J import qualified Text.JSONb.Decode as Decode import qualified Text.JSONb.Encode as Encode --- | A fully formed JSON document.-newtype JsonDoc = JsonDoc { unJsonDoc :: BL.ByteString }- deriving (Show, Eq)+import qualified Data.Text+import qualified Data.Text.Lazy -readJsonDoc :: FilePath -> IO JsonDoc-readJsonDoc = fmap JsonDoc . BL.readFile+import qualified Data.ByteString+import qualified Data.ByteString.Lazy -writeJsonDoc :: FilePath -> JsonDoc -> IO ()-writeJsonDoc fp = BL.writeFile fp . unJsonDoc+import Data.Convertible.Text (ConvertSuccess, cs)+import Control.Failure -- | Matches the scalar data types used in json-b so we can have proper mapping -- between the two libraries. data JsonScalar =- JsonString BS.ByteString+ JsonString Data.ByteString.ByteString | JsonNumber Rational | JsonBoolean Bool | JsonNull--instance ConvertSuccess JsonScalar Text where- convertSuccess (JsonString b) = convertSuccess b- convertSuccess (JsonNumber r) = convertSuccess r- convertSuccess (JsonBoolean b) = convertSuccess b- convertSuccess JsonNull = convertSuccess ""-instance ConvertSuccess Text JsonScalar where- convertSuccess = JsonString . convertSuccess+ deriving (Eq, Show, Read, Data, Typeable) -instance ConvertSuccess JsonScalar String where- convertSuccess = cs . (cs :: JsonScalar -> Text)-instance ConvertSuccess String JsonScalar where- convertSuccess = JsonString . cs+jsToBS :: JsonScalar -> Data.ByteString.ByteString+jsToBS (JsonString b) = b+jsToBS (JsonNumber r) = cs r+jsToBS (JsonBoolean b) = cs b+jsToBS JsonNull = Data.ByteString.empty -instance ConvertSuccess JsonScalar BS.ByteString where- convertSuccess = cs . (cs :: JsonScalar -> Text)-instance ConvertSuccess BS.ByteString JsonScalar where- convertSuccess = JsonString . cs+class (Eq a) => IsJsonScalar a where+ fromJsonScalar :: JsonScalar -> a+ toJsonScalar :: a -> JsonScalar+instance IsJsonScalar JsonScalar where+ fromJsonScalar = id+ toJsonScalar = id+instance IsJsonScalar Data.Text.Text where+ fromJsonScalar = cs . jsToBS+ toJsonScalar = JsonString . cs+instance IsJsonScalar Data.Text.Lazy.Text where+ fromJsonScalar = cs . jsToBS+ toJsonScalar = JsonString . cs+instance IsJsonScalar [Char] where+ fromJsonScalar = cs . jsToBS+ toJsonScalar = JsonString . cs+instance IsJsonScalar Data.ByteString.ByteString where+ fromJsonScalar = jsToBS+ toJsonScalar = JsonString+instance IsJsonScalar Data.ByteString.Lazy.ByteString where+ fromJsonScalar = cs . jsToBS+ toJsonScalar = JsonString . cs -$(let types = [''String, ''BS.ByteString, ''Text]- in deriveAttempts $- [(k, ''JsonScalar) | k <- types] ++- [(''JsonScalar, v) | v <- types])+toJsonObject :: ConvertSuccess k Data.ByteString.ByteString+ => IsJsonScalar v+ => Object k v+ -> JsonObject+toJsonObject = mapKeysValues cs toJsonScalar -$(deriveSuccessConvs ''BS.ByteString ''JsonScalar- [''String, ''BS.ByteString, ''Text]- [''String, ''BS.ByteString, ''Text, ''JsonScalar])+fromJsonObject :: ConvertSuccess Data.ByteString.ByteString k+ => IsJsonScalar v+ => JsonObject+ -> Object k v+fromJsonObject = mapKeysValues cs fromJsonScalar -- | Meant to match closely with the 'JSON' data type. Therefore, uses strict -- byte strings for keys and the 'JsonScalar' type for scalars.-type JsonObject = Object BS.ByteString JsonScalar+type JsonObject = Object Data.ByteString.ByteString JsonScalar -instance ConvertSuccess JSON JsonObject where- convertSuccess (J.Object trie) =- Mapping . map (second cs) $ Data.Trie.toList trie- convertSuccess (J.Array a) = Sequence $ map cs $ a- convertSuccess (J.String bs) = Scalar $ JsonString bs- convertSuccess (J.Number r) = Scalar $ JsonNumber r- convertSuccess (J.Boolean b) = Scalar $ JsonBoolean b- convertSuccess J.Null = Scalar JsonNull-instance ConvertAttempt JsonObject JSON where- convertAttempt (Scalar (JsonString bs)) = return $ J.String bs- convertAttempt (Scalar (JsonNumber r)) = return $ J.Number r- convertAttempt (Scalar (JsonBoolean b)) = return $ J.Boolean b- convertAttempt (Scalar JsonNull) = return J.Null- convertAttempt (Sequence s) = J.Array <$> mapM ca s- convertAttempt (Mapping m) =- J.Object . Data.Trie.fromList <$> mapM- (runKleisli $ second $ Kleisli ca) m+jsonToJO :: JSON -> JsonObject+jsonToJO (J.Object trie) =+ Mapping . map (second jsonToJO) $ Data.Trie.toList trie+jsonToJO (J.Array a) = Sequence $ map jsonToJO $ a+jsonToJO (J.String bs) = Scalar $ JsonString bs+jsonToJO (J.Number r) = Scalar $ JsonNumber r+jsonToJO (J.Boolean b) = Scalar $ JsonBoolean b+jsonToJO J.Null = Scalar JsonNull +joToJSON :: JsonObject -> JSON+joToJSON (Scalar (JsonString bs)) = J.String bs+joToJSON (Scalar (JsonNumber r)) = J.Number r+joToJSON (Scalar (JsonBoolean b)) = J.Boolean b+joToJSON (Scalar JsonNull) = J.Null+joToJSON (Sequence s) = J.Array $ map joToJSON s+joToJSON (Mapping m) =+ J.Object $ Data.Trie.fromList $ map (second joToJSON) m+ -- | Error type for JSON decoding errors. newtype JsonDecodeError = JsonDecodeError String deriving (Show, Typeable) instance Exception JsonDecodeError -- | Decode a lazy bytestring into a 'JsonObject'.-decode :: MonadFailure JsonDecodeError m- => BL.ByteString- -> m JsonObject-decode = either (failure . JsonDecodeError . fst)- (return . toJsonObject)+decode :: Failure JsonDecodeError m+ => ConvertSuccess Data.ByteString.ByteString k+ => IsJsonScalar v+ => Data.ByteString.ByteString+ -> m (Object k v)+decode = either (failure . JsonDecodeError)+ (return . fromJsonObject . jsonToJO) . Decode.decode -- | Encode a 'JsonObject' into a lazy bytestring.-encode :: JsonObject- -> BL.ByteString-encode = Encode.encode Encode.Compact- . fromSuccess- . fromJsonObject---- | 'convertSuccess' specialized for 'JsonObject's-toJsonObject :: ConvertSuccess a JsonObject => a -> JsonObject-toJsonObject = cs+encode :: (ConvertSuccess k Data.ByteString.ByteString, IsJsonScalar v)+ => Object k v+ -> Data.ByteString.ByteString+encode = Encode.encode Encode.Compact . joToJSON . toJsonObject --- | 'convertAttempt' specialized for 'JsonObject's-fromJsonObject :: ConvertAttempt JsonObject a- => JsonObject- -> Attempt a-fromJsonObject = ca+encodeFile :: (ConvertSuccess k Data.ByteString.ByteString, IsJsonScalar v)+ => FilePath+ -> Object k v+ -> IO ()+encodeFile fp = Data.ByteString.writeFile fp . encode -instance ConvertSuccess JsonObject JsonDoc where- convertSuccess = JsonDoc . encode-instance ConvertAttempt JsonDoc JsonObject where- convertAttempt = decode . unJsonDoc+decodeFile :: Failure JsonDecodeError m+ => ConvertSuccess Data.ByteString.ByteString k+ => IsJsonScalar v+ => FilePath+ -> IO (m (Object k v))+decodeFile fp = decode `fmap` Data.ByteString.readFile fp
data-object-json.cabal view
@@ -1,5 +1,5 @@ name: data-object-json-version: 0.0.0.1+version: 0.3.0 license: BSD3 license-file: LICENSE author: Michael Snoyman <michael@snoyman.com>@@ -13,12 +13,12 @@ library build-depends: base >= 4 && < 5,- json-b >= 0.0.4 && < 0.1,+ JSONb >= 1.0 && < 1.1, bytestring-trie >= 0.1.4 && < 0.2, bytestring >= 0.9.1.4 && < 0.10,- data-object >= 0.2.0 && < 0.3,- attempt >= 0.2.0 && < 0.3,- convertible-text >= 0.2.0.4 && < 0.3,- syb+ data-object >= 0.3.0 && < 0.4,+ convertible-text >= 0.3.0 && < 0.4,+ failure >= 0.1.0 && < 0.2,+ text >= 0.7.1 && < 0.8 exposed-modules: Data.Object.Json ghc-options: -Wall