diff options
| author | citrons <citrons@mondecitronne.com> | 2025-01-26 01:56:53 -0600 |
|---|---|---|
| committer | citrons <citrons@mondecitronne.com> | 2025-01-26 01:56:53 -0600 |
| commit | 10b8a79389e7073f6bd65695c3d05c77b825bc33 (patch) | |
| tree | b7e6dbd84b5b2c960ab8aafc1f99c3950d679e44 /server/channel/membership.go | |
initial commit
Diffstat (limited to 'server/channel/membership.go')
| -rw-r--r-- | server/channel/membership.go | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/server/channel/membership.go b/server/channel/membership.go new file mode 100644 index 0000000..3a44517 --- /dev/null +++ b/server/channel/membership.go @@ -0,0 +1,87 @@ +package channel + +import ( + "citrons.xyz/talk/proto" +) + +type Membership struct { + Yes bool + See bool + Put bool + History bool + Moderate bool + Update bool + Invite bool + Op bool +} + +var DefaultMembership = Membership { + Yes: true, + See: true, + Put: true, + History: true, + Moderate: false, + Update: false, + Op: false, +} + +var CreatorMembership = Membership { + Yes: true, + See: true, + Put: true, + History: true, + Moderate: true, + Update: true, + Op: true, +} + +func (m Membership) Change(spec proto.Object) (Membership, *proto.Fail) { + new := m + for k, v := range spec.Fields { + var field *bool + switch k { + case "see": + field = &new.See + case "put": + field = &new.Put + case "history": + field = &new.History + case "moderate": + field = &new.Moderate + case "update": + field = &new.Update + case "": + continue + default: + return new, &proto.Fail{"invalid", "", nil} + } + switch v { + case "yes": + *field = true + case "no": + *field = false + default: + return new, &proto.Fail{"invalid", "", nil} + } + } + return new, nil +} + +func bstr(b bool) string { + if b { + return "yes" + } else { + return "no" + } +} + +func (m Membership) GetInfo() proto.Object { + return proto.Object {"membership", "", map[string]string { + "see": bstr(m.See), + "put": bstr(m.Put), + "history": bstr(m.History), + "moderate": bstr(m.Moderate), + "update": bstr(m.Update), + "op": bstr(m.Op), + }} +} |
