{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}
module Uniform.FileStatus
( getFileStatus,
isDirectory,
isRegularFile,
getFileStatus',
isSymbolicLink,
getModificationTimeFromStatus,
getFileSize,
P.EpochTime,
P.FileStatus,
)
where
import qualified System.Directory as S
import qualified System.Posix as P
import Uniform.Error
import Uniform.Filenames (Path, toShortFilePath)
import Uniform.Strings (putIOwords, showT)
unL :: Path df ar -> FilePath
unL :: forall df ar. Path df ar -> FilePath
unL = forall df ar. Path df ar -> FilePath
toShortFilePath
getFileStatus :: Path df ar -> ErrIO FileStatus
getFileStatus Path df ar
fp = forall a. IO a -> ErrIO a
callIO forall a b. (a -> b) -> a -> b
$ FilePath -> IO FileStatus
P.getFileStatus forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall df ar. Path df ar -> FilePath
unL forall a b. (a -> b) -> a -> b
$ Path df ar
fp
getFileStatus' :: FilePath -> ErrIO P.FileStatus
getFileStatus' :: FilePath -> ErrIO FileStatus
getFileStatus' FilePath
fp = forall a. IO a -> ErrIO a
callIO forall a b. (a -> b) -> a -> b
$ FilePath -> IO FileStatus
P.getFileStatus FilePath
fp
isRegularFile :: P.FileStatus -> Bool
isRegularFile :: FileStatus -> Bool
isRegularFile = FileStatus -> Bool
P.isRegularFile
isDirectory :: P.FileStatus -> Bool
isDirectory :: FileStatus -> Bool
isDirectory = FileStatus -> Bool
P.isDirectory
isSymbolicLink :: P.FileStatus -> Bool
isSymbolicLink :: FileStatus -> Bool
isSymbolicLink = FileStatus -> Bool
P.isSymbolicLink
getModificationTimeFromStatus :: P.FileStatus -> P.EpochTime
getModificationTimeFromStatus :: FileStatus -> EpochTime
getModificationTimeFromStatus = FileStatus -> EpochTime
P.modificationTime
getFileSize :: FileStatus -> FileOffset
getFileSize = FileStatus -> FileOffset
P.fileSize
createSymbolicLink :: Show (Path df ra) => Path df ra -> Path df ra -> ErrIO ()
createSymbolicLink :: forall df ra.
Show (Path df ra) =>
Path df ra -> Path df ra -> ErrIO ()
createSymbolicLink Path df ra
fn Path df ra
tn = do
forall (m :: * -> *). MonadIO m => [Text] -> m ()
putIOwords [Text
"createSymbolidLink", forall {a}. Show a => a -> Text
showT Path df ra
fn, Text
"to", forall {a}. Show a => a -> Text
showT Path df ra
tn]
forall a. IO a -> ErrIO a
callIO forall a b. (a -> b) -> a -> b
$ FilePath -> FilePath -> IO ()
P.createSymbolicLink (forall df ar. Path df ar -> FilePath
unL Path df ra
fn) (forall df ar. Path df ar -> FilePath
unL Path df ra
tn)
renameLink :: Path df ra -> Path df ra -> ErrIO ()
renameLink :: forall df ra. Path df ra -> Path df ra -> ErrIO ()
renameLink Path df ra
old Path df ra
new = forall a. IO a -> ErrIO a
callIO forall a b. (a -> b) -> a -> b
$ FilePath -> FilePath -> IO ()
P.rename (forall df ar. Path df ar -> FilePath
unL Path df ra
old) (forall df ar. Path df ar -> FilePath
unL Path df ra
new)