/
event.go
141 lines (126 loc) · 3.91 KB
/
event.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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package v1beta2
import (
"github.com/akash-network/node/sdkutil"
sdk "github.com/cosmos/cosmos-sdk/types"
)
const (
EvActionProviderCreated = "provider-created"
EvActionProviderUpdated = "provider-updated"
EvActionProviderDeleted = "provider-deleted"
EvOwnerKey = "owner"
)
// EventProviderCreated struct
type EventProviderCreated struct {
Context sdkutil.BaseModuleEvent `json:"context"`
Owner sdk.AccAddress `json:"owner"`
}
func NewEventProviderCreated(owner sdk.AccAddress) EventProviderCreated {
return EventProviderCreated{
Context: sdkutil.BaseModuleEvent{
Module: ModuleName,
Action: EvActionProviderCreated,
},
Owner: owner,
}
}
// ToSDKEvent method creates new sdk event for EventProviderCreated struct
func (ev EventProviderCreated) ToSDKEvent() sdk.Event {
return sdk.NewEvent(sdkutil.EventTypeMessage,
append([]sdk.Attribute{
sdk.NewAttribute(sdk.AttributeKeyModule, ModuleName),
sdk.NewAttribute(sdk.AttributeKeyAction, EvActionProviderCreated),
}, ProviderEVAttributes(ev.Owner)...)...,
)
}
// EventProviderUpdated struct
type EventProviderUpdated struct {
Context sdkutil.BaseModuleEvent `json:"context"`
Owner sdk.AccAddress `json:"owner"`
}
func NewEventProviderUpdated(owner sdk.AccAddress) EventProviderUpdated {
return EventProviderUpdated{
Context: sdkutil.BaseModuleEvent{
Module: ModuleName,
Action: EvActionProviderUpdated,
},
Owner: owner,
}
}
// ToSDKEvent method creates new sdk event for EventProviderUpdated struct
func (ev EventProviderUpdated) ToSDKEvent() sdk.Event {
return sdk.NewEvent(sdkutil.EventTypeMessage,
append([]sdk.Attribute{
sdk.NewAttribute(sdk.AttributeKeyModule, ModuleName),
sdk.NewAttribute(sdk.AttributeKeyAction, EvActionProviderUpdated),
}, ProviderEVAttributes(ev.Owner)...)...,
)
}
// EventProviderDeleted struct
type EventProviderDeleted struct {
Context sdkutil.BaseModuleEvent `json:"context"`
Owner sdk.AccAddress `json:"owner"`
}
func NewEventProviderDeleted(owner sdk.AccAddress) EventProviderDeleted {
return EventProviderDeleted{
Context: sdkutil.BaseModuleEvent{
Module: ModuleName,
Action: EvActionProviderDeleted,
},
Owner: owner,
}
}
// ToSDKEvent method creates new sdk event for EventProviderDeleted struct
func (ev EventProviderDeleted) ToSDKEvent() sdk.Event {
return sdk.NewEvent(sdkutil.EventTypeMessage,
append([]sdk.Attribute{
sdk.NewAttribute(sdk.AttributeKeyModule, ModuleName),
sdk.NewAttribute(sdk.AttributeKeyAction, EvActionProviderDeleted),
}, ProviderEVAttributes(ev.Owner)...)...,
)
}
// ProviderEVAttributes returns event attribues for given Provider
func ProviderEVAttributes(owner sdk.AccAddress) []sdk.Attribute {
return []sdk.Attribute{
sdk.NewAttribute(EvOwnerKey, owner.String()),
}
}
// ParseEVProvider returns provider details for given event attributes
func ParseEVProvider(attrs []sdk.Attribute) (sdk.AccAddress, error) {
owner, err := sdkutil.GetAccAddress(attrs, EvOwnerKey)
if err != nil {
return sdk.AccAddress{}, err
}
return owner, nil
}
// ParseEvent parses event and returns details of event and error if occurred
// TODO: Enable returning actual events.
func ParseEvent(ev sdkutil.Event) (sdkutil.ModuleEvent, error) {
if ev.Type != sdkutil.EventTypeMessage {
return nil, sdkutil.ErrUnknownType
}
if ev.Module != ModuleName {
return nil, sdkutil.ErrUnknownModule
}
switch ev.Action {
case EvActionProviderCreated:
owner, err := ParseEVProvider(ev.Attributes)
if err != nil {
return nil, err
}
return NewEventProviderCreated(owner), nil
case EvActionProviderUpdated:
owner, err := ParseEVProvider(ev.Attributes)
if err != nil {
return nil, err
}
return NewEventProviderUpdated(owner), nil
case EvActionProviderDeleted:
owner, err := ParseEVProvider(ev.Attributes)
if err != nil {
return nil, err
}
return NewEventProviderDeleted(owner), nil
default:
return nil, sdkutil.ErrUnknownAction
}
}