Skip to content

Commit a53334b

Browse files
committed
feat: add remove resource
1 parent 3af67d4 commit a53334b

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

gno/p/basedao/basedao.gno

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ func New(conf *Config) *DAO {
8080
NewRemoveMemberHandler(dao),
8181
NewAssignRoleHandler(dao),
8282
NewUnassignRoleHandler(dao),
83+
daokit.NewAddResourceHandler(dao.Core.Resources),
84+
daokit.NewRemoveResourceHandler(dao.Core.Resources),
8385
} {
8486
dao.Core.SetResource(&daokit.Resource{Handler: m, Condition: conf.InitialCondition})
8587
}

gno/p/daokit/resources.gno

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package daokit
22

33
import (
4+
"errors"
5+
46
"gno.land/p/demo/avl"
57
"gno.land/p/teritori/daocond"
68
)
@@ -24,6 +26,10 @@ func (r *resourcesStore) setResource(resource *Resource) {
2426
r.Resources.Set(resource.Handler.Type(), resource)
2527
}
2628

29+
func (r *resourcesStore) removeResource(resource *Resource) {
30+
r.Resources.Remove(resource.Handler.Type())
31+
}
32+
2733
func (r *resourcesStore) getResource(name string) *Resource {
2834
value, ok := r.Resources.Get(name)
2935
if !ok {
@@ -32,3 +38,34 @@ func (r *resourcesStore) getResource(name string) *Resource {
3238
res := value.(*Resource)
3339
return res
3440
}
41+
42+
const MsgAddResourceKind = "gno.land/p/teritori/daokit.AddResource"
43+
44+
func NewAddResourceHandler(r *resourcesStore) MessageHandler {
45+
return NewMessageHandler(MsgAddResourceKind, func(ipayload interface{}) {
46+
payload, ok := ipayload.(Resource)
47+
if !ok {
48+
panic(errors.New("invalid payload type"))
49+
}
50+
51+
if getResource(payload.Handler.Type()) != nil {
52+
panic("ressource " + payload.Handler.Type() + " already exists")
53+
}
54+
r.setResource(payload)
55+
})
56+
}
57+
58+
const MsgRemoveResourceKind = "gno.land/p/teritori/daokit.RemoveResource"
59+
60+
func NewRemoveResourceHandler(r *resourcesStore) MessageHandler {
61+
return NewMessageHandler(MsgRemoveResourceKind, func(ipayload interface{}) {
62+
payload, ok := ipayload.(Resource)
63+
if !ok {
64+
panic(errors.New("invalid payload type"))
65+
}
66+
if getResource(payload.Handler.Type()) == nil {
67+
panic("ressource " + payload.Handler.Type() + " does not exists")
68+
}
69+
r.removeResource(payload)
70+
})
71+
}

0 commit comments

Comments
 (0)