1// End-to-end scenario from the package README: a group with a base set and2// three roles, exercising base vs aggregated semantics, dedup, role3// removal, and readonly views.4package main56import (7"strings"
Functions
not supported for pure packages by the node (vm/qfuncs)
Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.
8
9"gno.land/p/nt/groups/v0"
10)
11
12var (
13 alice = address("alice") // base only
14 bob = address("bob") // base + council
15 carol = address("carol") // base + admin
16 dave = address("dave") // council only
17 eve = address("eve") // admin + moderator
18 frank = address("frank") // moderator only
19 grace = address("grace") // admin only
20 zed = address("zed") // not a member
21)
22
23func main() {
24// 1. A group with a base set and three named roles.
25 g := groups.NewGroup()
26 g.Add(alice)
27 g.Add(bob)
28 g.Add(carol)
29
30 admin, _ := g.AddRole("admin")
31 admin.Members().Add(carol)
32 admin.Members().Add(eve)
33 admin.Members().Add(grace)
34
35 council, _ := g.AddRole("council")
36 council.Members().Add(bob)
37 council.Members().Add(dave)
38
39 moderator, _ := g.AddRole("moderator")
40 moderator.Members().Add(eve)
41 moderator.Members().Add(frank)
42
43// 2. Has (base only) vs HasAny (base + roles).
44 println("Has(alice):", g.Has(alice)) // base member
45 println("Has(dave):", g.Has(dave)) // council only, not base
46 println("HasAny(dave):", g.HasAny(dave)) // somewhere in the group