diff options
Diffstat (limited to 'Val.hs')
-rw-r--r-- | Val.hs | 13 |
1 files changed, 9 insertions, 4 deletions
@@ -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 |