packages feed

hsjuiz-0.2.6: src/Juiz/Error.hs

-- | juiz のエラーコード (bindings/cjuiz/include/juiz_sdk.h と同じ値) と、Haskell 側で投げる例外。
module Juiz.Error
  ( JuizError (..)
  , throwJuiz
    -- * エラーコード
  , juizOk
  , juizValueTypeError
  , juizValueNotFoundError
  , juizValueConverterError
  , juizCapsulePtrLockError
  , juizCapsuleMapNoValue
  , juizCapsuleTypeError
  , juizCapsuleNoValue
  , juizProcessFunctionError
  , juizHaskellContainerTypeError
  , juizTypeSchemaInvalidError
  , juizValueDoesNotMatchTypeError
  , juizImageFormatError
  , juizTransformationsNotAttachedError
  , juizNoCommonAnchorError
  , juizPoseNotWritableError
  , juizInvalidPoseValueError
  , juizTransformationsError
  , juizTransformNotWritableError
  , juizTransformNotFoundError
  ) where

import Control.Exception (Exception, throwIO)
import Data.Int (Int64)
import Data.Text (Text)

-- | juiz のエラーコードと説明。プラグインの関数の中で投げると、エントリポイントがエラーコードに変えて juiz に返す
data JuizError = JuizError
  { juizErrorCode :: !Int64
  , juizErrorMessage :: !Text
  }
  deriving (Show)

instance Exception JuizError

throwJuiz :: Int64 -> Text -> IO a
throwJuiz code msg = throwIO (JuizError code msg)

juizOk, juizValueTypeError, juizValueNotFoundError, juizValueConverterError :: Int64
juizOk = 0
juizValueTypeError = -101
juizValueNotFoundError = -102
juizValueConverterError = -103

juizCapsulePtrLockError, juizCapsuleMapNoValue, juizCapsuleTypeError, juizCapsuleNoValue :: Int64
juizCapsulePtrLockError = -201
juizCapsuleMapNoValue = -301
juizCapsuleTypeError = -401
juizCapsuleNoValue = -402

-- | Process の関数が値を返せなかった (juiz_sdk.h の JUIZ_PROCESS_FUNCTION_NULL_OPT_RETURNED)。
-- 'JuizError' 以外の例外 (error や自分で投げた例外) はこのコードになる
juizProcessFunctionError :: Int64
juizProcessFunctionError = -501

-- | ContainerProcess に、期待する型ではない Container が渡された (juiz_sdk.h の JUIZ_HASKELL_CONTAINER_TYPE_ERROR)。
-- 別の言語の Container や、状態の型が違う Haskell の Container に結びつけたとき
juizHaskellContainerTypeError :: Int64
juizHaskellContainerTypeError = -602

-- | Avro のスキーマが juiz のデータ型の規則に合わない (juiz_sdk.h の JUIZ_TYPE_SCHEMA_INVALID_ERROR)
juizTypeSchemaInvalidError :: Int64
juizTypeSchemaInvalidError = -701

-- | 辞書の値が型に合わない (juiz_sdk.h の JUIZ_VALUE_DOES_NOT_MATCH_TYPE_ERROR)。
-- 型付きの引数に合わない値が渡されたとき (理由は juiz のログに出る)
juizValueDoesNotMatchTypeError :: Int64
juizValueDoesNotMatchTypeError = -702

-- | 画像の形式・大きさ・stride が正しくない、または扱えない形式 (juiz_sdk.h の JUIZ_IMAGE_FORMAT_ERROR)
juizImageFormatError :: Int64
juizImageFormatError = -704

-- | ContainerPose (docs/spec/transformations.md §12.3・§17)。
-- Container が System の Transformations につながっていない、または ContainerProcess の外で読み書きした
juizTransformationsNotAttachedError :: Int64
juizTransformationsNotAttachedError = -901

-- | 基準と Container の両方を含む Anchor がない
juizNoCommonAnchorError :: Int64
juizNoCommonAnchorError = -902

-- | 根の Anchor・基準自身・基準が子孫の Container への書き込み
juizPoseNotWritableError :: Int64
juizPoseNotWritableError = -903

-- | 長さ 0 の四元数、NaN・無限大
juizInvalidPoseValueError :: Int64
juizInvalidPoseValueError = -904

-- | そのほかの ContainerPose の失敗
juizTransformationsError :: Int64
juizTransformationsError = -905

-- | 'Juiz.Pose.setTransform' で、呼び出し元 Container が端点でも writers でもない Transform への書き込み、
-- readonly の ContainerProcess からの書き込み (§7.5、#410)
juizTransformNotWritableError :: Int64
juizTransformNotWritableError = -906

-- | 'Juiz.Pose.setTransform' の Transform が無い (§7.5、#410)
juizTransformNotFoundError :: Int64
juizTransformNotFoundError = -907