module Hackage.Security.Util.Base64 (
Base64
, fromByteString
, toByteString
) where
import Data.ByteString (ByteString)
import qualified Data.ByteString.Char8 as C8
import qualified Data.ByteString.Base64 as B64
import Hackage.Security.Util.JSON
newtype Base64 = Base64 ByteString
fromByteString :: ByteString -> Base64
fromByteString = Base64
toByteString :: Base64 -> ByteString
toByteString (Base64 bs) = bs
instance Monad m => ToJSON m Base64 where
toJSON (Base64 bs) = toJSON (C8.unpack (B64.encode bs))
instance ReportSchemaErrors m => FromJSON m Base64 where
fromJSON val = do
str <- fromJSON val
case B64.decode (C8.pack str) of
Left _err -> expected "base-64 encoded string" Nothing
Right bs -> return $ Base64 bs