Kind Pure package
Name v0
Namespace nt / groups
Exported functions n/a — not supported for pure packages by the node (vm/qfuncs)
Module gno.land/p/nt/groups/v0
gno 0.9 readonly.gno gno
⧉
1 package groups 2 3 import "gno.land/p/moul/addrset/v0" 4 5 // ReadonlyRole is a read-only view of a Role. It exposes only read-side 6 // methods and holds the *Role in an unexported field, so cross-package 7 // callers cannot mutate the role through this type. not supported for pure packages by the node (vm/qfuncs)
Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.
8
type ReadonlyRole struct {
9 role *Role
10 }
11
12 // Name returns the role's name.
13 func (rr ReadonlyRole) Name() string {
14 return rr.role.name
15 }
16
17 // Members returns a read-only view of the role's member set.
18 func (rr ReadonlyRole) Members() *addrset.ReadonlySet {
19 return rr.role.members.Readonly()
20 }
21
22 // Meta returns the role's metadata slot.
23 //
24 // NOTE: a mutable pointer stored in meta is NOT protected by this readonly
25 // view — the pointee remains mutable by anyone who retrieves it. See the
26 // package doc.
27 func (rr ReadonlyRole) Meta() any {
28 return rr.role.meta
29 }
30
31 // ReadonlyGroup is a read-only view of a Group. Every method mirrors the
32 // read-side of Group; mutators are absent. It holds the *Group in an
33 // unexported field, so cross-package callers cannot mutate through it.
34 type ReadonlyGroup struct {
35 group *Group
36 }
37
38 // --- Base set (base only) ---
39
40 // Has reports whether addr is in the base set (roles not consulted).
41 func (rg ReadonlyGroup) Has(addr address) bool {
42 return rg.group.Has(addr)
43 }
44
45 // Size returns the number of addresses in the base set only.
46 func (rg ReadonlyGroup) Size() int {
47 return rg.group.Size()
48 }
49
50 // Iterate walks the base set (only); see Group.Iterate.
51 func (rg ReadonlyGroup) Iterate(offset, count int , fn func (addr address) bool ) (stopped bool ) {
52 return rg.group.Iterate(offset, count, fn)
53 }
54
55 // --- Role registry ---
56
57 // GetRole returns a read-only view of the named role if it exists.
58 func (rg ReadonlyGroup) GetRole(name string ) (rr *ReadonlyRole, found bool ) {
59 r, ok := rg.group.GetRole(name)
60 if !ok {
61 return nil , false
62 }
63 return r.Readonly(), true
64 }
65
66 // HasRole reports whether a role with the given name exists.
67 func (rg ReadonlyGroup) HasRole(name string ) bool {
68 return rg.group.HasRole(name)
69 }
70
71 // RoleCount returns the number of registered roles.
72 func (rg ReadonlyGroup) RoleCount() int {
73 return rg.group.RoleCount()
74 }
75
76 // IterateRoles walks roles in name order; see Group.IterateRoles.
77 func (rg ReadonlyGroup) IterateRoles(offset, count int , fn func (*ReadonlyRole) bool ) (stopped bool ) {
78 return rg.group.IterateRoles(offset, count, fn)
79 }
80
81 // --- Aggregations ---
82
83 // HasAny reports whether addr is in the base set OR in any role.
84 func (rg ReadonlyGroup) HasAny(addr address) bool {
85 return rg.group.HasAny(addr)
86 }
87
88 // TotalSize returns the deduplicated count across base + all roles.
89 func (rg ReadonlyGroup) TotalSize() int {
90 return rg.group.TotalSize()
91 }
92
93 // IterateAll walks every distinct address across base + all roles; see
94 // Group.IterateAll.
95 func (rg ReadonlyGroup) IterateAll(offset, count int , fn func (addr address) bool ) (stopped bool ) {
96 return rg.group.IterateAll(offset, count, fn)
97 }
98
99 // RolesContaining returns the names of all roles containing addr, in name
100 // order; see Group.RolesContaining.
101 func (rg ReadonlyGroup) RolesContaining(addr address) [] string {
102 return rg.group.RolesContaining(addr)
103 }
104