module System.Zfs.Errors where
import System.Zfs.Lowlevel
data ZError = EzInitFailed
| EzNoMem
| EzBadProp
| EzPropReadOnly
| EzPropType
| EzPropNonInherit
| EzPropSpace
| EzBadType
| EzBusy
| EzExists
| EzNoEnt
| EzBadStream
| EzDsReadonly
| EzVolTooBig
| EzInvalidName
| EzBadRestore
| EzBadBackup
| EzBadTarget
| EzNoDevice
| EzBadDev
| EzNoReplicas
| EzResilvering
| EzBadVersion
| EzPoolUnavail
| EzDevOverflow
| EzBadPath
| EzCrossTarget
| EzZoned
| EzMountFailed
| EzUmountFailed
| EzUnshareNfsFailed
| EzShareNfsFailed
| EzPerm
| EzNoSpc
| EzFault
| EzIO
| EzIntr
| EzIsSpare
| EzInvalConfig
| EzRecursive
| EzNoHistory
| EzPoolProps
| EzPoolNotSup
| EzPoolInvalArg
deriving Show
errnoToZError :: Int -> ZError
errnoToZError errno = case errno of
2000 -> EzNoMem
2001 -> EzBadProp
2002 -> EzPropReadOnly
2003 -> EzPropType
2004 -> EzPropNonInherit
2005 -> EzPropSpace
2006 -> EzBadType
2007 -> EzBusy
2008 -> EzExists
2009 -> EzNoEnt
2010 -> EzBadStream
2011 -> EzDsReadonly
2012 -> EzVolTooBig
2013 -> EzInvalidName
2014 -> EzBadRestore
2015 -> EzBadBackup
2016 -> EzBadTarget
2017 -> EzNoDevice
2018 -> EzBadDev
2019 -> EzNoReplicas
2020 -> EzResilvering
2021 -> EzBadVersion
2022 -> EzPoolUnavail
2023 -> EzDevOverflow
2024 -> EzBadPath
2025 -> EzCrossTarget
2026 -> EzZoned
2027 -> EzMountFailed
2028 -> EzUmountFailed
2029 -> EzUnshareNfsFailed
2030 -> EzShareNfsFailed
2031 -> EzPerm
2032 -> EzNoSpc
2033 -> EzFault
2034 -> EzIO
2035 -> EzIntr
2036 -> EzIsSpare
2037 -> EzInvalConfig
2038 -> EzRecursive
2039 -> EzNoHistory
2040 -> EzPoolProps
2041 -> EzPoolNotSup
2042 -> EzPoolInvalArg
_ -> error (show errno)
yieldZError :: LibzfsHandlePtr -> IO (Either ZError a)
yieldZError z = do
errno <- libzfs_errno z
return $ Left $ errnoToZError errno