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}