module Codec.Encryption.OpenPGP.ASCIIArmor.Multipart (
multipartMerge
) where
import Codec.Encryption.OpenPGP.ASCIIArmor.Types
import Data.ByteString.Lazy (ByteString)
import qualified Data.ByteString.Lazy as BL
multipartMerge :: [Armor] -> Armor
multipartMerge :: [Armor] -> Armor
multipartMerge as' :: [Armor]
as' = [Armor] -> Armor -> Armor
go [Armor]
as' (ArmorType -> [(String, String)] -> ByteString -> Armor
Armor ArmorType
ArmorMessage [] ByteString
BL.empty)
where
go :: [Armor] -> Armor -> Armor
go :: [Armor] -> Armor -> Armor
go [] state :: Armor
state = Armor
state
go (Armor at :: ArmorType
at hs :: [(String, String)]
hs bs :: ByteString
bs:as :: [Armor]
as) state :: Armor
state = [Armor] -> Armor -> Armor
go [Armor]
as (ArmorType -> [(String, String)] -> ByteString -> Armor -> Armor
go' ArmorType
at [(String, String)]
hs ByteString
bs Armor
state)
go _ _ = String -> Armor
forall a. HasCallStack => String -> a
error "This shouldn't happen."
go' :: ArmorType -> [(String,String)] -> ByteString -> Armor -> Armor
go' :: ArmorType -> [(String, String)] -> ByteString -> Armor -> Armor
go' (ArmorSplitMessage _ _) hs :: [(String, String)]
hs bs :: ByteString
bs (Armor _ ohs :: [(String, String)]
ohs obs :: ByteString
obs) = ArmorType -> [(String, String)] -> ByteString -> Armor
Armor ArmorType
ArmorMessage ([(String, String)]
ohs [(String, String)] -> [(String, String)] -> [(String, String)]
forall a. [a] -> [a] -> [a]
++ [(String, String)]
hs) (ByteString
obs ByteString -> ByteString -> ByteString
`BL.append` ByteString
bs)
go' (ArmorSplitMessageIndefinite _) hs :: [(String, String)]
hs bs :: ByteString
bs (Armor _ ohs :: [(String, String)]
ohs obs :: ByteString
obs) = ArmorType -> [(String, String)] -> ByteString -> Armor
Armor ArmorType
ArmorMessage ([(String, String)]
ohs [(String, String)] -> [(String, String)] -> [(String, String)]
forall a. [a] -> [a] -> [a]
++ [(String, String)]
hs) (ByteString
obs ByteString -> ByteString -> ByteString
`BL.append` ByteString
bs)
go' _ _ _ state :: Armor
state = Armor
state