{-# LINE 1 "src/System/Directory/Glob/Internal.hsc" #-}
{-|
Module      : System.Directory.Glob.Internal
Copyright   : (c) Reuben D'Netto 2016
License     : Apache 2.0
Maintainer  : rdnetto@gmail.com
Portability : POSIX
-}
module System.Directory.Glob.Internal where

import Data.Bits ((.|.))
import Data.Monoid ((<>))
import Foreign.C.Types (CInt(..))




-- | Control flags for glob. Use 'globDefaults' if you have no special requirements.
--   To combine multiple flags, use the '<>' operator (re-exported here for convenience).
--   See <https://linux.die.net/man/3/glob man glob(3)> for more information.
data GlobFlag = GlobFlag !CInt

-- | Default value - equivalent to 0 for the C function.
globDefaults :: GlobFlag
globDefaults = GlobFlag 0


instance Semigroup GlobFlag where
    (GlobFlag a) <> (GlobFlag b) = GlobFlag (a .|. b)

instance Monoid GlobFlag where
    mempty = globDefaults


-- | Used for mutation of an existing structure - for internal use only.
globAppend :: GlobFlag
globAppend = GlobFlag 32

{-# LINE 36 "src/System/Directory/Glob/Internal.hsc" #-}
-- | Append a @/@ to each entry that is the path of a directory.
globMark :: GlobFlag
globMark = GlobFlag 2

{-# LINE 38 "src/System/Directory/Glob/Internal.hsc" #-}
-- | If there are no matches, return the original pattern.
globNoCheck   :: GlobFlag
globNoCheck   = GlobFlag 16

{-# LINE 40 "src/System/Directory/Glob/Internal.hsc" #-}
-- | Disable the use of @\@ for escaping metacharacters.
globNoEscape  :: GlobFlag
globNoEscape  = GlobFlag 64

{-# LINE 42 "src/System/Directory/Glob/Internal.hsc" #-}
-- | Do not sort the entries before returning them.
globNoSort    :: GlobFlag
globNoSort    = GlobFlag 4

{-# LINE 44 "src/System/Directory/Glob/Internal.hsc" #-}

-- GNU extensions

{-# LINE 47 "src/System/Directory/Glob/Internal.hsc" #-}
-- | Enable CSH-style brace expansion. e.g. foo.{txt,md}. Supports nested braces. (GNU extension)
globBrace :: GlobFlag
globBrace = GlobFlag 1024

{-# LINE 49 "src/System/Directory/Glob/Internal.hsc" #-}
-- | Enables globNoCheck if the pattern contains no metacharacters. (GNU extension)
globNoMagic   :: GlobFlag
globNoMagic   = GlobFlag 2048

{-# LINE 51 "src/System/Directory/Glob/Internal.hsc" #-}
-- | Only return directories, if it is cheap to do so. (GNU extension)
globOnlyDir   :: GlobFlag
globOnlyDir   = GlobFlag 8192

{-# LINE 53 "src/System/Directory/Glob/Internal.hsc" #-}
-- | Allow leading '.' to be matched by metacharacters.
globPeriod :: GlobFlag
globPeriod = GlobFlag 128

{-# LINE 55 "src/System/Directory/Glob/Internal.hsc" #-}
-- | Substitute home directory for '~' or '~user' prefixes.
globTilde :: GlobFlag
globTilde = GlobFlag 4096

{-# LINE 57 "src/System/Directory/Glob/Internal.hsc" #-}
-- | Like globTilde, but return no matches if there is no such user.
globTildeCheck :: GlobFlag
globTildeCheck = GlobFlag 16384

{-# LINE 59 "src/System/Directory/Glob/Internal.hsc" #-}

{-# LINE 60 "src/System/Directory/Glob/Internal.hsc" #-}