custom_resource.gno
0.98 Kb · 42 lines
1package custom_resource
2
3import (
4 "errors"
5
6 "gno.land/p/nt/ufmt/v0"
7 "gno.land/p/samcrew/daokit"
8)
9
10const ActionNewPostKind = "gno.land/r/daodemo/custom_resource/blog.NewPost"
11
12type ActionNewPost struct {
13 Title string
14 Content string
15}
16
17func (m *ActionNewPost) String() string {
18 return ufmt.Sprintf("## %s\n\n%s", m.Title, m.Content)
19}
20
21func (m *ActionNewPost) Type() string {
22 return ActionNewPostKind
23}
24
25func NewPostAction(title, content string) daokit.Action {
26 // def: daoKit.NewAction(kind: String, payload: interface{})
27 return daokit.NewAction(ActionNewPostKind, &ActionNewPost{
28 Title: title,
29 Content: content,
30 })
31}
32
33func NewPostHandler(blog *Blog) daokit.ActionHandler {
34 // def: daoKit.NewActionHandler(kind: String, payload: func(interface{}))
35 return daokit.NewActionHandler(ActionNewPostKind, func(payload interface{}, _ realm) {
36 action, ok := payload.(*ActionNewPost)
37 if !ok {
38 panic(errors.New("invalid action type"))
39 }
40 blog.NewPost(action.Title, action.Content)
41 })
42}