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) -- Evaluate errno and throw an error yieldZError :: LibzfsHandlePtr -> IO (Either ZError a) yieldZError z = do errno <- libzfs_errno z return $ Left $ errnoToZError errno