packages feed

libheif-hs-0.1.0.0: src/Codec/HEIF/Error.hs

module Codec.HEIF.Error
  ( HeifException (..),
    HeifError (..),
    HeifSubError (..),
    SizeMismatch (..),
    Library (..),
  )
where

import Control.Exception
import Numeric.Natural

-- | Size mismatch: expected 'expectedBytes' bytes, equal to 'infoWidth' * 'infoHeight'
-- but got 'gotBytes' bytes.
data SizeMismatch
  = SizeMismatch
  { expectedBytes :: Natural,
    infoWidth :: Natural,
    infoHeight :: Natural,
    gotBytes :: Natural
  }
  deriving (Show)

-- | Corresponds to the errors returned by libheif.
data Library
  = Library
  { code :: HeifError,
    subcode :: HeifSubError,
    message :: Maybe String
  }
  deriving (Show)

data HeifException
  = LibraryException Library
  | DecodeSizeMismatch SizeMismatch
  deriving (Show)

instance Exception HeifException

-- | Maps to C enum heif_error_code from libheif/heif_error.h.
data HeifError
  = HeifErrorOk
  | HeifErrorInputDoesNotExist
  | HeifErrorInvalidInput
  | HeifErrorUnsupportedFiletype
  | HeifErrorUnsupportedFeature
  | HeifErrorUsageError
  | HeifErrorMemoryAllocationError
  | HeifErrorDecoderPluginError
  | HeifErrorEncoderPluginError
  | HeifErrorEncodingError
  | HeifErrorColorProfileDoesNotExist
  | HeifErrorPluginLoadingError
  | HeifErrorCanceled
  | HeifErrorEndOfSequence
  deriving (Show, Eq)

-- | Maps to C enum heif_suberror_code from libheif/heif_error.h.
data HeifSubError
  = HeifSubErrorUnspecified
  | HeifSubErrorEndOfData
  | HeifSubErrorInvalidBoxSize
  | HeifSubErrorNoFtypBox
  | HeifSubErrorNoIdatBox
  | HeifSubErrorNoMetaBox
  | HeifSubErrorNoHdlrBox
  | HeifSubErrorNoHvcCBox
  | HeifSubErrorNoPitmBox
  | HeifSubErrorNoIpcoBox
  | HeifSubErrorNoIpmaBox
  | HeifSubErrorNoIlocBox
  | HeifSubErrorNoIinfBox
  | HeifSubErrorNoIprpBox
  | HeifSubErrorNoIrefBox
  | HeifSubErrorNoPictHandler
  | HeifSubErrorIpmaBoxReferencesNonexistingProperty
  | HeifSubErrorNoPropertiesAssignedToItem
  | HeifSubErrorNoItemData
  | HeifSubErrorInvalidGridData
  | HeifSubErrorMissingGridImages
  | HeifSubErrorInvalidCleanAperture
  | HeifSubErrorInvalidOverlayData
  | HeifSubErrorOverlayImageOutsideOfCanvas
  | HeifSubErrorAuxiliaryImageTypeUnspecified
  | HeifSubErrorNoOrInvalidPrimaryItem
  | HeifSubErrorNoInfeBox
  | HeifSubErrorUnknownColorProfileType
  | HeifSubErrorWrongTileImageChromaFormat
  | HeifSubErrorInvalidFractionalNumber
  | HeifSubErrorInvalidImageSize
  | HeifSubErrorInvalidPixiBox
  | HeifSubErrorNoAv1CBox
  | HeifSubErrorWrongTileImagePixelDepth
  | HeifSubErrorUnknownNCLXColorPrimaries
  | HeifSubErrorUnknownNCLXTransferCharacteristics
  | HeifSubErrorUnknownNCLXMatrixCoefficients
  | HeifSubErrorInvalidRegionData
  | HeifSubErrorNoIspeProperty
  | HeifSubErrorCameraIntrinsicMatrixUndefined
  | HeifSubErrorCameraExtrinsicMatrixUndefined
  | HeifSubErrorInvalidJ2KCodestream
  | HeifSubErrorNoVvcCBox
  | HeifSubErrorNoIcbrBox
  | HeifSubErrorNoAvcCBox
  | HeifSubErrorInvalidMiniBox
  | HeifSubErrorDecompressionInvalidData
  | HeifSubErrorNoMoovBox
  | HeifSubErrorNCLXColrVUIMismatch
  | HeifSubErrorSecurityLimitExceeded
  | HeifSubErrorCompressionInitialisationError
  | HeifSubErrorNonexistingItemReferenced
  | HeifSubErrorNullPointerArgument
  | HeifSubErrorNonexistingImageChannelReferenced
  | HeifSubErrorUnsupportedPluginVersion
  | HeifSubErrorUnsupportedWriterVersion
  | HeifSubErrorUnsupportedParameter
  | HeifSubErrorInvalidParameterValue
  | HeifSubErrorInvalidProperty
  | HeifSubErrorItemReferenceCycle
  | HeifSubErrorUnsupportedCodec
  | HeifSubErrorUnsupportedImageType
  | HeifSubErrorUnsupportedDataVersion
  | HeifSubErrorUnsupportedColorConversion
  | HeifSubErrorUnsupportedItemConstructionMethod
  | HeifSubErrorUnsupportedHeaderCompressionMethod
  | HeifSubErrorUnsupportedGenericCompressionMethod
  | HeifSubErrorUnsupportedEssentialProperty
  | HeifSubErrorUnsupportedTrackType
  | HeifSubErrorUnsupportedBitDepth
  | HeifSubErrorCannotWriteOutputData
  | HeifSubErrorEncoderInitialization
  | HeifSubErrorEncoderEncoding
  | HeifSubErrorEncoderCleanup
  | HeifSubErrorTooManyRegions
  | HeifSubErrorPluginLoadingError
  | HeifSubErrorPluginIsNotLoaded
  | HeifSubErrorCannotReadPluginDirectory
  | HeifSubErrorNoMatchingDecoderInstalled
  deriving (Show, Eq)