{-# LANGUAGE OverloadedStrings #-}

module Data.Attoparsec.ByteString.Base64 where

import qualified Data.Attoparsec.ByteString as Atto
import Data.ByteString (ByteString)
-- import Data.Char (isAlphaNum)
import Data.Word8 (isAlphaNum, _equal, _plus, _slash)
import Data.Monoid ((<>))


base64 :: Atto.Parser ByteString
base64 = do
  init <- Atto.takeWhile1 (\c -> isAlphaNum c || c == _plus || c == _slash) Atto.<?> "content"
  padding <- Atto.takeWhile (== _equal) Atto.<?> "padding"
  pure (init <> padding)