module Test.Cleveland.Lorentz.Ticketer
( ticketerContract'
, ticketerContract
, callViaTicketer
) where
import Lorentz
import Prelude (HasCallStack)
import Test.Cleveland
ticketerContract'
:: ( NiceComparable td
, NiceParameterFull (View_ (payload, (Natural, td)) callbackArg)
, NiceParameter callbackArg
)
=> [payload, Ticket td] :-> '[callbackArg]
-> Contract (View_ (payload, (Natural, td)) callbackArg) () ()
ticketerContract' :: ('[payload, Ticket td] :-> '[callbackArg])
-> Contract (View_ (payload, (Natural, td)) callbackArg) () ()
ticketerContract' '[payload, Ticket td] :-> '[callbackArg]
mkCallbackArg = ContractCode (View_ (payload, (Natural, td)) callbackArg) ()
-> Contract (View_ (payload, (Natural, td)) callbackArg) () ()
forall cp st.
(NiceParameterFull cp, NiceStorageFull st) =>
ContractCode cp st -> Contract cp st ()
defaultContract (ContractCode (View_ (payload, (Natural, td)) callbackArg) ()
-> Contract (View_ (payload, (Natural, td)) callbackArg) () ())
-> ContractCode (View_ (payload, (Natural, td)) callbackArg) ()
-> Contract (View_ (payload, (Natural, td)) callbackArg) () ()
forall a b. (a -> b) -> a -> b
$
'[(View_ (payload, (Natural, td)) callbackArg, ())]
:-> '[View_ (payload, (Natural, td)) callbackArg, ()]
forall a b (s :: [*]). ((a, b) : s) :-> (a : b : s)
unpair ('[(View_ (payload, (Natural, td)) callbackArg, ())]
:-> '[View_ (payload, (Natural, td)) callbackArg, ()])
-> ('[View_ (payload, (Natural, td)) callbackArg, ()]
:-> '[(List Operation, ())])
-> ContractCode (View_ (payload, (Natural, td)) callbackArg) ()
forall (a :: [*]) (b :: [*]) (c :: [*]).
(a :-> b) -> (b :-> c) -> a :-> c
# (forall (s0 :: [*]).
((payload, (Natural, td)) : () : s0) :-> (callbackArg : s0))
-> '[View_ (payload, (Natural, td)) callbackArg, ()]
:-> '[(List Operation, ())]
forall r storage a (s :: [*]).
(NiceParameter r, Dupable storage) =>
(forall (s0 :: [*]). (a : storage : s0) :-> (r : s0))
-> (View_ a r : storage : s) :-> ((List Operation, storage) : s)
view_
( ((() : s0) :-> s0)
-> ((payload, (Natural, td)) : () : s0)
:-> ((payload, (Natural, td)) : s0)
forall a (s :: [*]) (s' :: [*]).
HasCallStack =>
(s :-> s') -> (a : s) :-> (a : s')
dip (forall (s :: [*]). (() : s) :-> s
forall a (s :: [*]). (a : s) :-> s
drop @()) (((payload, (Natural, td)) : () : s0)
:-> ((payload, (Natural, td)) : s0))
-> (((payload, (Natural, td)) : s0)
:-> (payload : (Natural, td) : s0))
-> ((payload, (Natural, td)) : () : s0)
:-> (payload : (Natural, td) : s0)
forall (a :: [*]) (b :: [*]) (c :: [*]).
(a :-> b) -> (b :-> c) -> a :-> c
# ((payload, (Natural, td)) : s0) :-> (payload : (Natural, td) : s0)
forall a b (s :: [*]). ((a, b) : s) :-> (a : b : s)
unpair (((payload, (Natural, td)) : () : s0)
:-> (payload : (Natural, td) : s0))
-> ((payload : (Natural, td) : s0) :-> (payload : Ticket td : s0))
-> ((payload, (Natural, td)) : () : s0)
:-> (payload : Ticket td : s0)
forall (a :: [*]) (b :: [*]) (c :: [*]).
(a :-> b) -> (b :-> c) -> a :-> c
# (((Natural, td) : s0) :-> (Ticket td : s0))
-> (payload : (Natural, td) : s0) :-> (payload : Ticket td : s0)
forall a (s :: [*]) (s' :: [*]).
HasCallStack =>
(s :-> s') -> (a : s) :-> (a : s')
dip (((Natural, td) : s0) :-> (Natural : td : s0)
forall a b (s :: [*]). ((a, b) : s) :-> (a : b : s)
unpair (((Natural, td) : s0) :-> (Natural : td : s0))
-> ((Natural : td : s0) :-> (td : Natural : s0))
-> ((Natural, td) : s0) :-> (td : Natural : s0)
forall (a :: [*]) (b :: [*]) (c :: [*]).
(a :-> b) -> (b :-> c) -> a :-> c
# (Natural : td : s0) :-> (td : Natural : s0)
forall a b (s :: [*]). (a : b : s) :-> (b : a : s)
swap (((Natural, td) : s0) :-> (td : Natural : s0))
-> ((td : Natural : s0) :-> (Ticket td : s0))
-> ((Natural, td) : s0) :-> (Ticket td : s0)
forall (a :: [*]) (b :: [*]) (c :: [*]).
(a :-> b) -> (b :-> c) -> a :-> c
# (td : Natural : s0) :-> (Ticket td : s0)
forall a (s :: [*]).
NiceComparable a =>
(a : Natural : s) :-> (Ticket a : s)
ticket) (((payload, (Natural, td)) : () : s0)
:-> (payload : Ticket td : s0))
-> ((payload : Ticket td : s0) :-> (callbackArg : s0))
-> ((payload, (Natural, td)) : () : s0) :-> (callbackArg : s0)
forall (a :: [*]) (b :: [*]) (c :: [*]).
(a :-> b) -> (b :-> c) -> a :-> c
# ('[payload, Ticket td] :-> '[callbackArg])
-> ('[payload, Ticket td] ++ s0) :-> ('[callbackArg] ++ s0)
forall (s :: [*]) (i :: [*]) (o :: [*]).
(KnownList i, KnownList o) =>
(i :-> o) -> (i ++ s) :-> (o ++ s)
framed '[payload, Ticket td] :-> '[callbackArg]
mkCallbackArg
)
ticketerContract
:: ( NiceComparable td
, callbackArg ~ (payload, Ticket td)
, NiceParameterFull (View_ (payload, (Natural, td)) callbackArg)
, NiceParameter callbackArg
)
=> Contract (View_ (payload, (Natural, td)) callbackArg) () ()
ticketerContract :: Contract (View_ (payload, (Natural, td)) callbackArg) () ()
ticketerContract = ('[payload, Ticket td] :-> '[(payload, Ticket td)])
-> Contract
(View_ (payload, (Natural, td)) (payload, Ticket td)) () ()
forall td payload callbackArg.
(NiceComparable td,
NiceParameterFull (View_ (payload, (Natural, td)) callbackArg),
NiceParameter callbackArg) =>
('[payload, Ticket td] :-> '[callbackArg])
-> Contract (View_ (payload, (Natural, td)) callbackArg) () ()
ticketerContract' '[payload, Ticket td] :-> '[(payload, Ticket td)]
forall a b (s :: [*]). (a : b : s) :-> ((a, b) : s)
pair
callViaTicketer
:: forall targetArg payload td targetAddr ticketerParam ticketerAddr m.
( HasCallStack
, MonadOps m
, ticketerParam ~ View_ (payload, (Natural, td)) targetArg
, ToTAddress ticketerParam () ticketerAddr
, ToContractRef targetArg targetAddr
, NiceParameterFull ticketerParam
)
=> ticketerAddr
-> Natural
-> td
-> targetAddr
-> payload
-> m ()
callViaTicketer :: ticketerAddr -> Natural -> td -> targetAddr -> payload -> m ()
callViaTicketer ticketerAddr
ticketer Natural
ticketAmount td
ticketData targetAddr
target payload
payload =
ticketerAddr
-> EntrypointRef 'Nothing
-> View_ (payload, (Natural, td)) targetArg
-> m ()
forall param vd addr (m :: * -> *) epRef epArg.
(HasCallStack, MonadOps m, ToTAddress param vd addr,
HasEntrypointArg param epRef epArg, IsoValue epArg,
Typeable epArg) =>
addr -> epRef -> epArg -> m ()
call @ticketerParam @() ticketerAddr
ticketer EntrypointRef 'Nothing
CallDefault
((payload, (Natural, td))
-> targetAddr -> View_ (payload, (Natural, td)) targetArg
forall r contract a.
ToContractRef r contract =>
a -> contract -> View_ a r
mkView_ (payload
payload, (Natural
ticketAmount, td
ticketData)) targetAddr
target)