{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE ViewPatterns #-}
module Codec.Archive.ZTar
( Compression(..)
, create
, create'
, extract
) where
import qualified Data.ByteString.Lazy as BS
import qualified Codec.Archive.ZTar.GZip as GZip
import qualified Codec.Archive.ZTar.Tar as Tar
import qualified Codec.Archive.ZTar.Zip as Zip
data Compression
= NoCompression
| GZip
| Zip
deriving (Show)
create :: Compression
-> FilePath
-> FilePath
-> IO ()
create compression archive dir = create' compression archive dir ["."]
create' :: Compression
-> FilePath
-> FilePath
-> [FilePath]
-> IO ()
create' compression = case compression of
NoCompression -> Tar.create
GZip -> GZip.create
Zip -> Zip.create
extract :: FilePath
-> FilePath
-> IO ()
extract dir archive = BS.readFile archive >>= \case
Tar.TarFormat -> Tar.extract dir archive
GZip.GZipFormat -> GZip.extract dir archive
Zip.ZipFormat -> Zip.extract dir archive
_ -> fail $ "Could not recognize archive format: " ++ archive