-- | Objects from which a script hash can be extracted
module Cooked.Conversion.ToScriptHash where

import Cooked.Conversion.ToVersionedScript
import Plutus.Script.Utils.Scripts qualified as Script
import Plutus.Script.Utils.Typed qualified as Script
import PlutusLedgerApi.V3 qualified as Api

class ToScriptHash a where
  toScriptHash :: a -> Api.ScriptHash

instance ToScriptHash Api.ScriptHash where
  toScriptHash :: ScriptHash -> ScriptHash
toScriptHash = ScriptHash -> ScriptHash
forall a. a -> a
id

instance ToScriptHash Script.MintingPolicyHash where
  toScriptHash :: MintingPolicyHash -> ScriptHash
toScriptHash (Script.MintingPolicyHash BuiltinByteString
hash) = BuiltinByteString -> ScriptHash
Script.ScriptHash BuiltinByteString
hash

instance ToScriptHash Script.ValidatorHash where
  toScriptHash :: ValidatorHash -> ScriptHash
toScriptHash (Script.ValidatorHash BuiltinByteString
hash) = BuiltinByteString -> ScriptHash
Script.ScriptHash BuiltinByteString
hash

instance ToScriptHash (Script.Versioned Script.Script) where
  toScriptHash :: Versioned Script -> ScriptHash
toScriptHash = Versioned Script -> ScriptHash
Script.scriptHash

instance ToScriptHash (Script.Versioned Script.Validator) where
  toScriptHash :: Versioned Validator -> ScriptHash
toScriptHash = Versioned Script -> ScriptHash
forall a. ToScriptHash a => a -> ScriptHash
toScriptHash (Versioned Script -> ScriptHash)
-> (Versioned Validator -> Versioned Script)
-> Versioned Validator
-> ScriptHash
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Versioned Validator -> Versioned Script
forall a. ToVersionedScript a => a -> Versioned Script
toVersionedScript

instance ToScriptHash (Script.TypedValidator a) where
  toScriptHash :: TypedValidator a -> ScriptHash
toScriptHash = Versioned Script -> ScriptHash
forall a. ToScriptHash a => a -> ScriptHash
toScriptHash (Versioned Script -> ScriptHash)
-> (TypedValidator a -> Versioned Script)
-> TypedValidator a
-> ScriptHash
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TypedValidator a -> Versioned Script
forall a. ToVersionedScript a => a -> Versioned Script
toVersionedScript

instance ToScriptHash (Script.Versioned Script.MintingPolicy) where
  toScriptHash :: Versioned MintingPolicy -> ScriptHash
toScriptHash = Versioned Script -> ScriptHash
forall a. ToScriptHash a => a -> ScriptHash
toScriptHash (Versioned Script -> ScriptHash)
-> (Versioned MintingPolicy -> Versioned Script)
-> Versioned MintingPolicy
-> ScriptHash
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Versioned MintingPolicy -> Versioned Script
forall a. ToVersionedScript a => a -> Versioned Script
toVersionedScript