{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -fno-omit-interface-pragmas #-} module PlutusLedgerApi.V4.Internal (ListEncoded (..)) where import PlutusTx.Blueprint.Class (HasBlueprintSchema (..)) import PlutusTx.Blueprint.Schema (ConstructorSchema (..), Schema (..)) import PlutusTx.Builtins qualified as Builtins (matchData') import PlutusTx.Builtins.Internal qualified as Builtins import PlutusTx.IsData.Class (FromData (..), ToData (..), UnsafeFromData (..)) import PlutusTx.Prelude qualified as PlutusTx newtype ListEncoded wrapped = ListEncoded wrapped instance ToData wrapped => ToData (ListEncoded wrapped) where {-# INLINEABLE toBuiltinData #-} toBuiltinData :: ListEncoded wrapped -> BuiltinData toBuiltinData (ListEncoded wrapped value) = BuiltinList BuiltinData -> BuiltinData Builtins.mkList (BuiltinPair BuiltinInteger (BuiltinList BuiltinData) -> BuiltinList BuiltinData forall a b. BuiltinPair a b -> b Builtins.snd (BuiltinData -> BuiltinPair BuiltinInteger (BuiltinList BuiltinData) Builtins.unsafeDataAsConstr (wrapped -> BuiltinData forall a. ToData a => a -> BuiltinData toBuiltinData wrapped value))) instance FromData wrapped => FromData (ListEncoded wrapped) where {-# INLINEABLE fromBuiltinData #-} fromBuiltinData :: BuiltinData -> Maybe (ListEncoded wrapped) fromBuiltinData BuiltinData value = BuiltinData -> (BuiltinInteger -> BuiltinList BuiltinData -> Maybe (ListEncoded wrapped)) -> (BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Maybe (ListEncoded wrapped)) -> (BuiltinList BuiltinData -> Maybe (ListEncoded wrapped)) -> (BuiltinInteger -> Maybe (ListEncoded wrapped)) -> (BuiltinByteString -> Maybe (ListEncoded wrapped)) -> Maybe (ListEncoded wrapped) forall r. BuiltinData -> (BuiltinInteger -> BuiltinList BuiltinData -> r) -> (BuiltinList (BuiltinPair BuiltinData BuiltinData) -> r) -> (BuiltinList BuiltinData -> r) -> (BuiltinInteger -> r) -> (BuiltinByteString -> r) -> r Builtins.matchData' BuiltinData value (\BuiltinInteger _ BuiltinList BuiltinData _ -> Maybe (ListEncoded wrapped) forall a. Maybe a Nothing) (\BuiltinList (BuiltinPair BuiltinData BuiltinData) _ -> Maybe (ListEncoded wrapped) forall a. Maybe a Nothing) (\BuiltinList BuiltinData fields -> wrapped -> ListEncoded wrapped forall wrapped. wrapped -> ListEncoded wrapped ListEncoded (wrapped -> ListEncoded wrapped) -> Maybe wrapped -> Maybe (ListEncoded wrapped) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b PlutusTx.<$> BuiltinData -> Maybe wrapped forall a. FromData a => BuiltinData -> Maybe a fromBuiltinData (BuiltinInteger -> BuiltinList BuiltinData -> BuiltinData Builtins.mkConstr BuiltinInteger 0 BuiltinList BuiltinData fields)) (\BuiltinInteger _ -> Maybe (ListEncoded wrapped) forall a. Maybe a Nothing) (\BuiltinByteString _ -> Maybe (ListEncoded wrapped) forall a. Maybe a Nothing) instance UnsafeFromData wrapped => UnsafeFromData (ListEncoded wrapped) where {-# INLINEABLE unsafeFromBuiltinData #-} unsafeFromBuiltinData :: BuiltinData -> ListEncoded wrapped unsafeFromBuiltinData BuiltinData value = wrapped -> ListEncoded wrapped forall wrapped. wrapped -> ListEncoded wrapped ListEncoded (BuiltinData -> wrapped forall a. UnsafeFromData a => BuiltinData -> a unsafeFromBuiltinData (BuiltinInteger -> BuiltinList BuiltinData -> BuiltinData Builtins.mkConstr BuiltinInteger 0 (BuiltinData -> BuiltinList BuiltinData Builtins.unsafeDataAsList BuiltinData value))) instance HasBlueprintSchema wrapped referencedTypes => HasBlueprintSchema (ListEncoded wrapped) referencedTypes where schema :: Schema referencedTypes schema = case forall wrapped (referencedTypes :: [*]). HasBlueprintSchema wrapped referencedTypes => Schema referencedTypes schema @wrapped @referencedTypes of SchemaConstructor SchemaInfo info (MkConstructorSchema Natural 0 [Schema referencedTypes] fields) -> SchemaInfo -> [Schema referencedTypes] -> Schema referencedTypes forall (referencedTypes :: [*]). SchemaInfo -> [Schema referencedTypes] -> Schema referencedTypes SchemaListTuple SchemaInfo info [Schema referencedTypes] fields Schema referencedTypes _ -> [Char] -> Schema referencedTypes forall a. HasCallStack => [Char] -> a error [Char] "ListEncoded requires a product schema with constructor index zero"