Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

members_extension.gno

1.38 Kb · 47 lines
 1package basedao
 2
 3import "gno.land/p/samcrew/daokit"
 4
 5type MembersViewExtension interface {
 6	IsMember(memberId string) bool
 7}
 8
 9// The extension registry key. It names this package, so it has to match the
10// path this package is published at — third-party lookups are pinned to this
11// literal once published, and it named gno.land/p/demo/basedao, which does not
12// exist.
13const MembersViewExtensionPath = "gno.land/p/samcrew/basedao.MembersView"
14
15// The realm is threaded because daokit.DAO.Extension takes one. This extension
16// is public, so any realm may fetch it and the realm is not checked — pass your
17// own cur.
18func MustGetMembersViewExtension(dao daokit.DAO, rlm realm) MembersViewExtension {
19	ext := dao.Extension(MembersViewExtensionPath, rlm)
20	if ext == nil {
21		panic("no such extension: " + MembersViewExtensionPath)
22	}
23	val, ok := ext.(MembersViewExtension)
24	if !ok {
25		panic("extension does not conform to interface: " + MembersViewExtensionPath)
26	}
27	return val
28}
29
30type membersViewExtension struct {
31	getStore  func() *MembersStore
32	queryPath string
33}
34
35func (m *membersViewExtension) IsMember(memberId string) bool {
36	return m.getStore().IsMember(memberId)
37}
38
39var _ MembersViewExtension = (*membersViewExtension)(nil)
40
41func (m *membersViewExtension) Info() daokit.ExtensionInfo {
42	return daokit.ExtensionInfo{
43		Path:      MembersViewExtensionPath,
44		Version:   "1",
45		QueryPath: m.queryPath,
46	}
47}