module Data.Conduit.Tar.Types
( Header(..)
, TarChunk(..)
, TarException(..)
, TarCreateException(..)
, FileType(..)
, FileInfo(..)
, FileOffset
, ByteCount
, UserID
, GroupID
, DeviceID
, EpochTime
) where
import Control.Exception (Exception)
import Data.ByteString (ByteString)
import Data.ByteString.Short (ShortByteString)
import Data.Typeable
import Data.Word
#if WINDOWS
import System.PosixCompat.Types
#else
import System.Posix.Types
#endif
data FileType
= FTNormal
| FTHardLink
| FTSymbolicLink !ByteString
| FTCharacterSpecial
| FTBlockSpecial
| FTDirectory
| FTFifo
| FTOther !Word8
deriving (Show, Eq)
data FileInfo = FileInfo
{ filePath :: !ByteString
, fileUserId :: !UserID
, fileUserName :: !ByteString
, fileGroupId :: !GroupID
, fileGroupName :: !ByteString
, fileMode :: !FileMode
, fileSize :: !FileOffset
, fileType :: !FileType
, fileModTime :: !EpochTime
} deriving (Show, Eq)
data Header = Header
{ headerOffset :: !FileOffset
, headerPayloadOffset :: !FileOffset
, headerFileNameSuffix :: !ShortByteString
, headerFileMode :: !CMode
, headerOwnerId :: !UserID
, headerGroupId :: !GroupID
, headerPayloadSize :: !FileOffset
, headerTime :: !EpochTime
, headerLinkIndicator :: !Word8
, headerLinkName :: !ShortByteString
, headerMagicVersion :: !ShortByteString
, headerOwnerName :: !ShortByteString
, headerGroupName :: !ShortByteString
, headerDeviceMajor :: !DeviceID
, headerDeviceMinor :: !DeviceID
, headerFileNamePrefix :: !ShortByteString
}
deriving Show
data TarChunk
= ChunkHeader Header
| ChunkPayload !FileOffset !ByteString
| ChunkException TarException
deriving Show
data TarException
= NoMoreHeaders
| UnexpectedPayload !FileOffset
| IncompleteHeader !FileOffset
| IncompletePayload !FileOffset !ByteCount
| ShortTrailer !FileOffset
| BadTrailer !FileOffset
| InvalidHeader !FileOffset
| BadChecksum !FileOffset
| FileTypeError !FileOffset !Char !String
deriving (Show, Typeable)
instance Exception TarException
data TarCreateException
= FileNameTooLong !FileInfo
| TarCreationError !String
deriving (Show, Typeable)
instance Exception TarCreateException