-
Notifications
You must be signed in to change notification settings - Fork 12
/
events.go
47 lines (36 loc) · 2.04 KB
/
events.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package spenddag
import (
"github.com/iotaledger/hive.go/ds"
"github.com/iotaledger/hive.go/runtime/event"
)
// region Events ///////////////////////////////////////////////////////////////////////////////////////////////////////
// Events is a container that acts as a dictionary for the events of a SpendDAG.
type Events[SpenderID, ResourceID comparable] struct {
// SpenderCreated is triggered when a new Spender is created.
SpenderCreated *event.Event1[SpenderID]
// SpenderEvicted is triggered when a Spender is evicted from the SpendDAG.
SpenderEvicted *event.Event1[SpenderID]
// SpentResourcesAdded is triggered when the Spender is added to a new SpendSet.
SpentResourcesAdded *event.Event2[SpenderID, ds.Set[ResourceID]]
// SpenderParentsUpdated is triggered when the parents of a Spender are updated.
SpenderParentsUpdated *event.Event2[SpenderID, ds.Set[SpenderID]]
// SpenderAccepted is an event that gets triggered whenever a Spender is confirmed.
SpenderAccepted *event.Event1[SpenderID]
// SpenderRejected is an event that gets triggered whenever a Spender is rejected.
SpenderRejected *event.Event1[SpenderID]
event.Group[Events[SpenderID, ResourceID], *Events[SpenderID, ResourceID]]
}
// NewEvents contains the constructor of the Events object (it is generated by a generic factory).
func NewEvents[SpenderID, ResourceID comparable](optsLinkTarget ...*Events[SpenderID, ResourceID]) (events *Events[SpenderID, ResourceID]) {
return event.CreateGroupConstructor(func() (self *Events[SpenderID, ResourceID]) {
return &Events[SpenderID, ResourceID]{
SpenderCreated: event.New1[SpenderID](),
SpenderEvicted: event.New1[SpenderID](),
SpentResourcesAdded: event.New2[SpenderID, ds.Set[ResourceID]](),
SpenderParentsUpdated: event.New2[SpenderID, ds.Set[SpenderID]](),
SpenderAccepted: event.New1[SpenderID](),
SpenderRejected: event.New1[SpenderID](),
}
})(optsLinkTarget...)
}
// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////