{-# LANGUAGE ForeignFunctionInterface #-}

{-# LINE 2 "./System/XFCE/Xfconf/Error.chs" #-}

-- | Xfconf library and daemon error descriptions
--
-- Both the Xfconf daemon and library provide error information via the
-- use of GErrors.
--
-- For more information, see:
-- http:\/\/docs.xfce.org\/api\/xfconf\/xfconf-xfconf-errors.html





{-# LINE 15 "./System/XFCE/Xfconf/Error.chs" #-}

module System.XFCE.Xfconf.Error (
                XfconfError(..),
                xfconfErrorDomain
                ) where

import System.Glib.GError

import System.XFCE.Xfconf.FFI

{----------------------------------------------------------------------
-- Xfconf Error
----------------------------------------------------------------------}

-- | The 'GErrorDomain' for Xfconf.
xfconfErrorDomain :: GErrorDomain
xfconfErrorDomain = xfconf_get_error_quark
{-# LINE 32 "./System/XFCE/Xfconf/Error.chs" #-}

{- | An enumeration listing the different kinds of errors under the
   'xfconfErrorDomain' domain.

     [@xfconfErrorUnknown@]
         An unknown error occurred

     [@xfconfErrorChannelNotFound@]
         The specified channel does not exist

     [@xfconfErrorPropertyNotFound@]
         The specified property does not exist on the channel

     [@xfconfErrorReadFailure@]
         There was a failure reading from the configuration store

     [@xfconfErrorWriteFailure@]
         There was a failure writing to the configuration store

     [@xfconfErrorPermissionDenied@]
         The user is not allowed to read or write to the channel or
         property

     [@xfconfErrorInternalError@]
         An internal error (likely a bug in xfconf) occurred

     [@xfconfErrorNoBackend@]
         No backends were found, or those found could not be loaded

     [@xfconfErrorInvalidProperty@]
         The property name specified was invalid

     [@xfconfErrorInvalidChannel@]
         The channel name specified was invalid
-}
data XfconfError = XfconfErrorUnknown
                 | XfconfErrorChannelNotFound
                 | XfconfErrorPropertyNotFound
                 | XfconfErrorReadFailure
                 | XfconfErrorWriteFailure
                 | XfconfErrorPermissionDenied
                 | XfconfErrorInternalError
                 | XfconfErrorNoBackend
                 | XfconfErrorInvalidProperty
                 | XfconfErrorInvalidChannel
                 
instance Enum XfconfError where
  fromEnum XfconfErrorUnknown = 0
  fromEnum XfconfErrorChannelNotFound = 1
  fromEnum XfconfErrorPropertyNotFound = 2
  fromEnum XfconfErrorReadFailure = 3
  fromEnum XfconfErrorWriteFailure = 4
  fromEnum XfconfErrorPermissionDenied = 5
  fromEnum XfconfErrorInternalError = 6
  fromEnum XfconfErrorNoBackend = 7
  fromEnum XfconfErrorInvalidProperty = 8
  fromEnum XfconfErrorInvalidChannel = 9

  toEnum 0 = XfconfErrorUnknown
  toEnum 1 = XfconfErrorChannelNotFound
  toEnum 2 = XfconfErrorPropertyNotFound
  toEnum 3 = XfconfErrorReadFailure
  toEnum 4 = XfconfErrorWriteFailure
  toEnum 5 = XfconfErrorPermissionDenied
  toEnum 6 = XfconfErrorInternalError
  toEnum 7 = XfconfErrorNoBackend
  toEnum 8 = XfconfErrorInvalidProperty
  toEnum 9 = XfconfErrorInvalidChannel
  toEnum unmatched = error ("XfconfError.toEnum: Cannot match " ++ show unmatched)

  succ XfconfErrorUnknown = XfconfErrorChannelNotFound
  succ XfconfErrorChannelNotFound = XfconfErrorPropertyNotFound
  succ XfconfErrorPropertyNotFound = XfconfErrorReadFailure
  succ XfconfErrorReadFailure = XfconfErrorWriteFailure
  succ XfconfErrorWriteFailure = XfconfErrorPermissionDenied
  succ XfconfErrorPermissionDenied = XfconfErrorInternalError
  succ XfconfErrorInternalError = XfconfErrorNoBackend
  succ XfconfErrorNoBackend = XfconfErrorInvalidProperty
  succ XfconfErrorInvalidProperty = XfconfErrorInvalidChannel
  succ _ = undefined

  pred XfconfErrorChannelNotFound = XfconfErrorUnknown
  pred XfconfErrorPropertyNotFound = XfconfErrorChannelNotFound
  pred XfconfErrorReadFailure = XfconfErrorPropertyNotFound
  pred XfconfErrorWriteFailure = XfconfErrorReadFailure
  pred XfconfErrorPermissionDenied = XfconfErrorWriteFailure
  pred XfconfErrorInternalError = XfconfErrorPermissionDenied
  pred XfconfErrorNoBackend = XfconfErrorInternalError
  pred XfconfErrorInvalidProperty = XfconfErrorNoBackend
  pred XfconfErrorInvalidChannel = XfconfErrorInvalidProperty
  pred _ = undefined

  enumFromTo x y | fromEnum x == fromEnum y = [ y ]
                 | otherwise = x : enumFromTo (succ x) y
  enumFrom x = enumFromTo x XfconfErrorInvalidChannel
  enumFromThen _ _ =     error "Enum XfconfError: enumFromThen not implemented"
  enumFromThenTo _ _ _ =     error "Enum XfconfError: enumFromThenTo not implemented"

{-# LINE 68 "./System/XFCE/Xfconf/Error.chs" #-}

instance GErrorClass XfconfError where
        gerrorDomain _ = xfconfErrorDomain

foreign import ccall unsafe "xfconf_get_error_quark"
  xfconf_get_error_quark :: CUInt