Search Apps Documentation Source Content File Folder Download Copy Actions Download

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}