summaryrefslogtreecommitdiffhomepage
path: root/Val.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Val.hs')
-rw-r--r--Val.hs13
1 files changed, 9 insertions, 4 deletions
diff --git a/Val.hs b/Val.hs
index 86a35c9..40e718b 100644
--- a/Val.hs
+++ b/Val.hs
@@ -2,18 +2,23 @@
module Val where
-import Data.ByteString
+import Memory
+
import GHC.Generics (Generic)
import Data.Aeson
import Data.Aeson.Types
import qualified Codec.Binary.Base64 as B64
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
+import qualified Data.ByteString as B
-- | Newtype of ByteString so we can have JSON instances without orphans.
-newtype Val = Val { val :: ByteString }
+newtype Val = Val { val :: B.ByteString }
deriving (Show, Generic, Eq, Monoid)
+instance DataSize Val where
+ dataSize (Val b) = fromIntegral (B.length b)
+
-- | JSON instances for Val, using base64 encoding when the value
-- is not utf-8 encoded, and otherwise using a more efficient encoding.
instance ToJSON Val where
@@ -28,10 +33,10 @@ instance FromJSON Val where
Nothing -> Val <$> (unb64 =<< o .: "b64")
parseJSON invalid = typeMismatch "ByteString" invalid
-b64 :: ByteString -> T.Text
+b64 :: B.ByteString -> T.Text
b64 = T.decodeUtf8 . B64.encode
-unb64 :: Monad m => T.Text -> m ByteString
+unb64 :: Monad m => T.Text -> m B.ByteString
unb64 t = either
(\_ -> fail "bad base64 data")
return