module Hydra.Contract.HeadError (
  errorCode,
  module Hydra.Contract.HeadError,
) where

import Hydra.Contract.Error (ToErrorCode (..), errorCode)
import Text.Show (Show)

data HeadError
  = InvalidHeadStateTransition
  | BurntTokenNumberMismatch
  | ReimbursedOutputsDontMatch
  | STNotSpent
  | IncorrectUtxoHash
  | ChangedParameters
  | WrongStateInOutputDatum
  | MissingCommits
  | HeadValueIsNotPreserved
  | HasBoundedValidityCheckFailed
  | ClosedWithNonInitialHash
  | IncorrectClosedContestationDeadline
  | InfiniteUpperBound
  | InfiniteLowerBound
  | ContestersNonEmpty
  | TooOldSnapshot
  | UpperBoundBeyondContestationDeadline
  | ContestNoUpperBoundDefined
  | MustNotPushDeadline
  | MustPushDeadline
  | ContesterNotIncluded
  | WrongNumberOfSigners
  | SignerAlreadyContested
  | FannedOutUtxoHashNotEqualToClosedUtxoHash
  | LowerBoundBeforeContestationDeadline
  | FanoutNoLowerBoundDefined
  | CloseNoUpperBoundDefined
  | ScriptNotSpendingAHeadInput
  | SignerIsNotAParticipant
  | NoSigners
  | TooManySigners
  | NoOutputDatumError
  | UnexpectedNonInlineDatum
  | SignatureVerificationFailed
  | PartySignatureVerificationFailed
  | NotPayingToHead
  | NotAllValueCollected
  deriving stock (Int -> HeadError -> ShowS
[HeadError] -> ShowS
HeadError -> String
(Int -> HeadError -> ShowS)
-> (HeadError -> String)
-> ([HeadError] -> ShowS)
-> Show HeadError
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> HeadError -> ShowS
showsPrec :: Int -> HeadError -> ShowS
$cshow :: HeadError -> String
show :: HeadError -> String
$cshowList :: [HeadError] -> ShowS
showList :: [HeadError] -> ShowS
Show)

instance ToErrorCode HeadError where
  toErrorCode :: HeadError -> Text
toErrorCode = \case
    HeadError
InvalidHeadStateTransition -> Text
"H01"
    HeadError
BurntTokenNumberMismatch -> Text
"H02"
    HeadError
ReimbursedOutputsDontMatch -> Text
"H03"
    HeadError
STNotSpent -> Text
"H04"
    HeadError
IncorrectUtxoHash -> Text
"H05"
    HeadError
ChangedParameters -> Text
"H06"
    HeadError
WrongStateInOutputDatum -> Text
"H07"
    HeadError
MissingCommits -> Text
"H08"
    HeadError
HeadValueIsNotPreserved -> Text
"H09"
    HeadError
HasBoundedValidityCheckFailed -> Text
"H10"
    HeadError
ClosedWithNonInitialHash -> Text
"H11"
    HeadError
IncorrectClosedContestationDeadline -> Text
"H12"
    HeadError
InfiniteUpperBound -> Text
"H13"
    HeadError
InfiniteLowerBound -> Text
"H14"
    HeadError
ContestersNonEmpty -> Text
"H15"
    HeadError
TooOldSnapshot -> Text
"H16"
    HeadError
UpperBoundBeyondContestationDeadline -> Text
"H17"
    HeadError
ContestNoUpperBoundDefined -> Text
"H18"
    HeadError
MustNotPushDeadline -> Text
"H19"
    HeadError
MustPushDeadline -> Text
"H20"
    HeadError
ContesterNotIncluded -> Text
"H21"
    HeadError
WrongNumberOfSigners -> Text
"H22"
    HeadError
SignerAlreadyContested -> Text
"H23"
    HeadError
FannedOutUtxoHashNotEqualToClosedUtxoHash -> Text
"H24"
    HeadError
LowerBoundBeforeContestationDeadline -> Text
"H25"
    HeadError
FanoutNoLowerBoundDefined -> Text
"H26"
    HeadError
CloseNoUpperBoundDefined -> Text
"H27"
    HeadError
ScriptNotSpendingAHeadInput -> Text
"H28"
    HeadError
SignerIsNotAParticipant -> Text
"H29"
    HeadError
NoSigners -> Text
"H30"
    HeadError
TooManySigners -> Text
"H31"
    HeadError
NoOutputDatumError -> Text
"H32"
    HeadError
UnexpectedNonInlineDatum -> Text
"H33"
    HeadError
SignatureVerificationFailed -> Text
"H34"
    HeadError
PartySignatureVerificationFailed -> Text
"H35"
    HeadError
NotPayingToHead -> Text
"H36"
    HeadError
NotAllValueCollected -> Text
"H37"