-- | Objects from which a credential can be extracted
module Cooked.Conversion.ToCredential where

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

class ToCredential a where
  toCredential :: a -> Api.Credential

instance ToCredential Api.Credential where
  toCredential :: Credential -> Credential
toCredential = Credential -> Credential
forall a. a -> a
id

instance ToCredential Api.Address where
  toCredential :: Address -> Credential
toCredential (Api.Address Credential
cred Maybe StakingCredential
_) = Credential
cred

instance ToCredential Api.PubKeyHash where
  toCredential :: PubKeyHash -> Credential
toCredential = PubKeyHash -> Credential
Api.PubKeyCredential

instance ToCredential Wallet where
  toCredential :: Wallet -> Credential
toCredential = PubKeyHash -> Credential
forall a. ToCredential a => a -> Credential
toCredential (PubKeyHash -> Credential)
-> (Wallet -> PubKeyHash) -> Wallet -> Credential
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Wallet -> PubKeyHash
walletPKHash

instance ToCredential Api.ScriptHash where
  toCredential :: ScriptHash -> Credential
toCredential = ScriptHash -> Credential
Api.ScriptCredential

instance ToCredential Script.ValidatorHash where
  toCredential :: ValidatorHash -> Credential
toCredential = ScriptHash -> Credential
forall a. ToCredential a => a -> Credential
toCredential (ScriptHash -> Credential)
-> (ValidatorHash -> ScriptHash) -> ValidatorHash -> Credential
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ValidatorHash -> ScriptHash
forall a. ToScriptHash a => a -> ScriptHash
toScriptHash

instance ToCredential (Script.Versioned Script.Script) where
  toCredential :: Versioned Script -> Credential
toCredential = ScriptHash -> Credential
forall a. ToCredential a => a -> Credential
toCredential (ScriptHash -> Credential)
-> (Versioned Script -> ScriptHash)
-> Versioned Script
-> Credential
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Versioned Script -> ScriptHash
forall a. ToScriptHash a => a -> ScriptHash
toScriptHash

instance ToCredential (Script.Versioned Script.Validator) where
  toCredential :: Versioned Validator -> Credential
toCredential = ScriptHash -> Credential
forall a. ToCredential a => a -> Credential
toCredential (ScriptHash -> Credential)
-> (Versioned Validator -> ScriptHash)
-> Versioned Validator
-> Credential
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Versioned Validator -> ScriptHash
forall a. ToScriptHash a => a -> ScriptHash
toScriptHash

instance ToCredential (Script.TypedValidator a) where
  toCredential :: TypedValidator a -> Credential
toCredential = ScriptHash -> Credential
forall a. ToCredential a => a -> Credential
toCredential (ScriptHash -> Credential)
-> (TypedValidator a -> ScriptHash)
-> TypedValidator a
-> Credential
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TypedValidator a -> ScriptHash
forall a. ToScriptHash a => a -> ScriptHash
toScriptHash

instance ToCredential (Script.Versioned Script.MintingPolicy) where
  toCredential :: Versioned MintingPolicy -> Credential
toCredential = ScriptHash -> Credential
forall a. ToCredential a => a -> Credential
toCredential (ScriptHash -> Credential)
-> (Versioned MintingPolicy -> ScriptHash)
-> Versioned MintingPolicy
-> Credential
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Versioned MintingPolicy -> ScriptHash
forall a. ToScriptHash a => a -> ScriptHash
toScriptHash