serokell-util-0.1.1: src/Serokell/Util/Parse/Base64.hs
-- | Parsing Base64
module Serokell.Util.Parse.Base64
( base64
, base64Url
) where
import qualified Data.ByteString as BS
import Data.Text (pack, unpack)
import Serokell.Util.Base64 (decode, decodeUrl)
import Serokell.Util.Parse.Common (Parser, asciiAlphaNum)
import Text.Parsec (many, many1, (<|>))
import Text.ParserCombinators.Parsec.Char (char)
base64 :: Parser BS.ByteString
base64 = do
str <- (++) <$> many1 (asciiAlphaNum <|> char '+' <|> char '/') <*> many (char '=')
case decode $ pack str of
Left e -> fail $ unpack e
Right bs -> return bs
base64Url :: Parser BS.ByteString
base64Url = do
str <- (++) <$> many1 (asciiAlphaNum <|> char '_' <|> char '-') <*> many (char '=')
case decodeUrl $ pack str of
Left e -> fail $ unpack e
Right bs -> return bs