packages feed

data-object 0.0.1 → 0.0.2

raw patch · 2 files changed

+60/−21 lines, 2 filesdep +safePVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: safe

API changes (from Hackage documentation)

- Data.Object: data Object
- Data.Object: instance [overlap ok] Show Object
+ Data.Object: data GenObject key val
+ Data.Object: instance [overlap ok] (Show key, Show val) => Show (GenObject key val)
+ Data.Object: instance [overlap ok] FromObject Bool
+ Data.Object: instance [overlap ok] FromObject Int
+ Data.Object: instance [overlap ok] FromScalar Bool
+ Data.Object: instance [overlap ok] FromScalar Int
+ Data.Object: instance [overlap ok] ToObject Bool
+ Data.Object: instance [overlap ok] ToObject Int
+ Data.Object: instance [overlap ok] ToScalar Bool
+ Data.Object: instance [overlap ok] ToScalar Int
+ Data.Object: type Object = GenObject ByteString ByteString
- Data.Object: Mapping :: [(ByteString, Object)] -> Object
+ Data.Object: Mapping :: [(key, GenObject key val)] -> GenObject key val
- Data.Object: Scalar :: ByteString -> Object
+ Data.Object: Scalar :: val -> GenObject key val
- Data.Object: Sequence :: [Object] -> Object
+ Data.Object: Sequence :: [GenObject key val] -> GenObject key val

Files

Data/Object.hs view
@@ -18,7 +18,8 @@ -- --------------------------------------------------------- module Data.Object-    ( Object (..)+    ( Object+    , GenObject (..)     , FromObject (..)     , ToObject (..)     , FromScalar (..)@@ -26,17 +27,21 @@     , oLookup     ) where -import qualified Data.ByteString as B+import qualified Data.ByteString.Lazy as B+import qualified Data.ByteString as BS import Data.ByteString.Class import Control.Arrow import Data.Time.Calendar+import Safe (readMay) -data Object =-    Mapping [(B.ByteString, Object)]-    | Sequence [Object]-    | Scalar B.ByteString+data GenObject key val =+    Mapping [(key, GenObject key val)]+    | Sequence [GenObject key val]+    | Scalar val     deriving (Show) +type Object = GenObject B.ByteString B.ByteString+ class ToObject a where     toObject :: a -> Object class FromObject a where@@ -60,10 +65,19 @@ instance FromObject B.ByteString where     fromObject = bsFromObject +instance ToScalar BS.ByteString where+    toScalar = toLazyByteString+instance FromScalar BS.ByteString where+    fromScalar = return . fromLazyByteString+instance ToObject BS.ByteString where+    toObject = Scalar . toScalar+instance FromObject BS.ByteString where+    fromObject o = fromObject o >>= fromScalar+ instance ToScalar String where-    toScalar = toStrictByteString+    toScalar = toLazyByteString instance FromScalar String where-    fromScalar = return . fromStrictByteString+    fromScalar = return . fromLazyByteString instance ToObject String where     toObject = Scalar . toScalar instance FromObject String where@@ -105,26 +119,50 @@         Nothing -> fail $ "Key not found: " ++ show key         Just x -> fromObject x --- helper-readM :: (Read r, Monad m) => String -> m r-readM s = case reads s of-            ((x, _):_) -> return x-            _ -> fail $ "Unable to read: " ++ s -- instances  instance ToScalar Day where-    toScalar = toStrictByteString . show+    toScalar = toLazyByteString . show instance ToObject Day where     toObject = toObject . toScalar instance FromScalar Day where     fromScalar bs = do-        let s = fromStrictByteString bs+        let s = fromLazyByteString bs         if length s /= 10             then fail ("Invalid day: " ++ s)             else do-                y <- readM $ take 4 s-                m <- readM $ take 2 $ drop 5 s-                d <- readM $ take 2 $ drop 8 s-                return $ fromGregorian y m d+                let x = do+                    y' <- readMay $ take 4 s+                    m' <- readMay $ take 2 $ drop 5 s+                    d' <- readMay $ take 2 $ drop 8 s+                    return (y', m', d')+                case x of+                    Just (y, m, d) -> return $ fromGregorian y m d+                    Nothing -> fail $ "Invalid day: " ++ s instance FromObject Day where+    fromObject o = fromObject o >>= fromScalar++instance ToScalar Bool where+    toScalar b = toScalar $ if b then "true" else "false"+instance ToObject Bool where+    toObject = toObject . toScalar+instance FromScalar Bool where+    fromScalar bs =+        case fromLazyByteString bs of+            "true" -> return True+            "false" -> return False+            x -> fail $ "Invalid bool value: " ++ x+instance FromObject Bool where+    fromObject o = fromObject o >>= fromScalar++instance ToScalar Int where+    toScalar = toScalar . show+instance ToObject Int where+    toObject = toObject . toScalar+instance FromScalar Int where+    fromScalar bs =+        case readMay $ fromLazyByteString bs of+            Nothing -> fail $ "Invalid integer: " ++ fromLazyByteString bs+            Just i -> return i+instance FromObject Int where     fromObject o = fromObject o >>= fromScalar
data-object.cabal view
@@ -1,5 +1,5 @@ name:            data-object-version:         0.0.1+version:         0.0.2 license:         BSD3 license-file:    LICENSE author:          Michael Snoyman <michael@snoyman.com>@@ -19,6 +19,7 @@     build-depends:   base >= 4 && < 5,                      bytestring-class,                      bytestring >= 0.9.1.4 && < 1,-                     time >= 1+                     time >= 1,+                     safe     exposed-modules: Data.Object     ghc-options:     -Wall