11package daokit
22
33import (
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+
2733func (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