hadoop-rpc-1.1.0.0: src/Data/Hadoop/Types.hs
{-# LANGUAGE DeriveDataTypeable #-}
module Data.Hadoop.Types where
import Control.Exception (Exception)
import Data.ByteString (ByteString)
import Data.Data (Data)
import Data.Text (Text)
import Data.Typeable (Typeable)
import qualified Data.Vector as V
import Data.Word (Word16, Word64)
------------------------------------------------------------------------
data NameNode = NameNode
{ nnEndPoint :: !Endpoint
, nnPrincipal :: !(Maybe Principal)
} deriving (Eq, Ord, Show)
type SocksProxy = Endpoint
data Principal = Principal
{ pService :: !Text
, pHost :: !Text
, pRealm :: !Text
} deriving (Eq, Ord, Show)
data Endpoint = Endpoint
{ epHost :: !HostName
, epPort :: !Port
} deriving (Eq, Ord, Show)
type HostName = Text
type Port = Int
------------------------------------------------------------------------
data HadoopConfig = HadoopConfig
{ hcUser :: !UserDetails
, hcNameNodes :: ![NameNode]
, hcProxy :: !(Maybe SocksProxy)
} deriving (Eq, Ord, Show)
data UserDetails = UserDetails
{ udUser :: !User
, udAuthUser :: !(Maybe User)
} deriving (Eq, Ord, Show)
------------------------------------------------------------------------
data ConfigError = ConfigError !Text
deriving (Show, Eq, Data, Typeable)
instance Exception ConfigError
------------------------------------------------------------------------
data RemoteError = RemoteError !Text !Text
deriving (Show, Eq, Data, Typeable)
instance Exception RemoteError
------------------------------------------------------------------------
data DecodeError = DecodeError !Text
deriving (Show, Eq, Data, Typeable)
instance Exception DecodeError
------------------------------------------------------------------------
data ConnectionClosed = ConnectionClosed
deriving (Show, Eq, Data, Typeable)
instance Exception ConnectionClosed
------------------------------------------------------------------------
type User = Text
type Group = Text
type Permission = Word16
-- | Path to a file/directory on HDFS, stored as UTF8.
type HdfsPath = ByteString
-- | Microseconds since 1 January 1970.
type HdfsTime = Word64
-- | The type of a file (either directory, file or symbolic link)
data FileType = Dir | File | SymLink
deriving (Eq, Ord, Show)
-- | Summary of a file or directory
data ContentSummary = ContentSummary
{ csLength :: !Word64
, csFileCount :: !Word64
, csDirectoryCount :: !Word64
, csQuota :: !Word64
, csSpaceConsumed :: !Word64
, csSpaceQuota :: !Word64
} deriving (Eq, Ord, Show)
-- | Partial directory listing.
data PartialListing = PartialListing
{ lsRemaining :: !Int -- ^ number of files left to fetch
, lsFiles :: !(V.Vector FileStatus)
} deriving (Eq, Ord, Show)
-- | Status of a file, directory or symbolic link.
data FileStatus = FileStatus
{ fsFileType :: !FileType
, fsPath :: !HdfsPath
, fsLength :: !Word64
, fsPermission :: !Permission
, fsOwner :: !User
, fsGroup :: !Group
, fsModificationTime :: !HdfsTime
, fsAccessTime :: !HdfsTime
-- Optional fields for symlink
, fsSymLink :: !(Maybe HdfsPath) -- ^ if symlink, target
-- Optional fields for file
, fsBlockReplication :: !Word16
, fsBlockSize :: !Word64
} deriving (Eq, Ord, Show)