bdcs-0.1.0: src/BDCS/Utils/Mode.hs
{-# LANGUAGE MultiWayIf #-}
-- |
-- Module: BDCS.Utils.Mode
-- Copyright: (c) 2016-2017 Red Hat, Inc.
-- License: LGPL
--
-- Maintainer: https://github.com/weldr
-- Stability: alpha
-- Portability: portable
--
-- Utility functions for Unix filesystem modes
module BDCS.Utils.Mode(modeAsText)
where
import Data.Bits(testBit)
import qualified Data.Text as T
import Data.Word(Word32)
-- | Convert a mode value into a Text file mode string
--
-- > modeAsText 0o755
-- > "rwxr-xr-x"
modeAsText :: Word32 -> T.Text
modeAsText x = T.pack [
if x `testBit` 8 then 'r' else '-',
if x `testBit` 7 then 'w' else '-',
if | x `testBit` 12 && x `testBit` 6 -> 's'
| x `testBit` 12 -> 'S'
| x `testBit` 6 -> 'x'
| otherwise -> '-',
if x `testBit` 5 then 'r' else '-',
if x `testBit` 4 then 'w' else '-',
if | x `testBit` 11 && x `testBit` 3 -> 's'
| x `testBit` 11 -> 'S'
| x `testBit` 3 -> 'x'
| otherwise -> '-',
if x `testBit` 2 then 'r' else '-',
if x `testBit` 1 then 'w' else '-',
if | x `testBit` 10 && x `testBit` 0 -> 't'
| x `testBit` 10 -> 'T'
| x `testBit` 0 -> 'x'
| otherwise -> '-'
]