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