packages feed

HsSVN-0.2: Subversion/Types.hs

{-# OPTIONS_GHC -optc-D__GLASGOW_HASKELL__=606 #-}
{-# OPTIONS_GHC -optc-DDARWIN #-}
{-# OPTIONS_GHC -optc-DSIGPROCMASK_SETS_THREAD_MASK #-}
{-# INCLUDE "HsSVN.h" #-}
{-# LINE 1 "Subversion/Types.hsc" #-}
{- -*- haskell -*- -}
{-# LINE 2 "Subversion/Types.hsc" #-}

-- #prune

-- |Some type definitions for Subversion.


{-# LINE 8 "Subversion/Types.hsc" #-}

module Subversion.Types
    ( RevNum

    , APR_SIZE_T
    , APR_SSIZE_T
    , APR_STATUS_T

    , SVN_BOOLEAN_T
    , SVN_FILESIZE_T
    , SVN_NODE_KIND_T
    , SVN_REVNUM_T
    , SVN_VERSION_T

    , marshalBool
    , unmarshalBool

    , NodeKind(..) -- public
    , unmarshalNodeKind

    , Version(..) -- public
    , peekVersion
    )
    where

import           Data.Int
import           Data.Word
import           Foreign.C.String
import           Foreign.Ptr
import           Foreign.Storable

-- |@'RevNum'@ represents a revision number.
type RevNum = Int

type APR_SIZE_T     = Word32
{-# LINE 43 "Subversion/Types.hsc" #-}
type APR_SSIZE_T    = Int32
{-# LINE 44 "Subversion/Types.hsc" #-}
type APR_STATUS_T   = Int32
{-# LINE 45 "Subversion/Types.hsc" #-}

type SVN_BOOLEAN_T   = Int32
{-# LINE 47 "Subversion/Types.hsc" #-}
type SVN_FILESIZE_T  = Int64
{-# LINE 48 "Subversion/Types.hsc" #-}
type SVN_NODE_KIND_T = Word32
{-# LINE 49 "Subversion/Types.hsc" #-}
type SVN_REVNUM_T    = Int32
{-# LINE 50 "Subversion/Types.hsc" #-}
data SVN_VERSION_T


marshalBool :: Bool -> SVN_BOOLEAN_T
marshalBool True  = (1)
{-# LINE 55 "Subversion/Types.hsc" #-}
marshalBool False = (0)
{-# LINE 56 "Subversion/Types.hsc" #-}

unmarshalBool :: SVN_BOOLEAN_T -> Bool
unmarshalBool (1) = True
{-# LINE 59 "Subversion/Types.hsc" #-}
unmarshalBool (0) = False
{-# LINE 60 "Subversion/Types.hsc" #-}

-- |@'NodeKind'@ represents a type of node in Subversion filesystem.
data NodeKind
    = NoNode   -- ^ The node is absent.
    | FileNode -- ^ The node is a file.
    | DirNode  -- ^ The node is a directory.
      deriving (Show, Eq)

unmarshalNodeKind :: SVN_NODE_KIND_T -> NodeKind
unmarshalNodeKind (0) = NoNode
{-# LINE 70 "Subversion/Types.hsc" #-}
unmarshalNodeKind (1) = FileNode
{-# LINE 71 "Subversion/Types.hsc" #-}
unmarshalNodeKind (2) = DirNode
{-# LINE 72 "Subversion/Types.hsc" #-}

-- |@'Version'@ is version.
data Version = Version {
      verMajor :: Int    -- ^ Major version number.
    , verMinor :: Int    -- ^ Minor version number.
    , verPatch :: Int    -- ^ Patch number.
    , verTag   :: String -- ^ The version tag.
    } deriving (Show, Eq)


peekVersion :: Ptr SVN_VERSION_T -> IO Version
peekVersion obj
    = do major <- peekVerMajor obj
         minor <- peekVerMinor obj
         patch <- peekVerPatch obj
         tag   <- peekVerTag   obj >>= peekCString
         return Version {
                      verMajor = major
                    , verMinor = minor
                    , verPatch = patch
                    , verTag   = tag
                    }


peekVerMajor :: Ptr SVN_VERSION_T -> IO Int
peekVerMajor = ((\hsc_ptr -> peekByteOff hsc_ptr 0))
{-# LINE 98 "Subversion/Types.hsc" #-}

peekVerMinor :: Ptr SVN_VERSION_T -> IO Int
peekVerMinor = ((\hsc_ptr -> peekByteOff hsc_ptr 4))
{-# LINE 101 "Subversion/Types.hsc" #-}

peekVerPatch :: Ptr SVN_VERSION_T -> IO Int
peekVerPatch = ((\hsc_ptr -> peekByteOff hsc_ptr 8))
{-# LINE 104 "Subversion/Types.hsc" #-}

peekVerTag :: Ptr SVN_VERSION_T -> IO CString
peekVerTag = ((\hsc_ptr -> peekByteOff hsc_ptr 12))