diff options
Diffstat (limited to 'server/channel/membership.go')
| -rw-r--r-- | server/channel/membership.go | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/server/channel/membership.go b/server/channel/membership.go index 3a44517..27c9bed 100644 --- a/server/channel/membership.go +++ b/server/channel/membership.go @@ -35,35 +35,42 @@ var CreatorMembership = Membership { Op: true, } -func (m Membership) Change(spec proto.Object) (Membership, *proto.Fail) { - new := m +func (m *Membership) Undata(spec proto.Object) { + m.Yes = true for k, v := range spec.Fields { - var field *bool + val := v == "yes" switch k { case "see": - field = &new.See + m.See = val case "put": - field = &new.Put + m.Put = val case "history": - field = &new.History + m.History = val case "moderate": - field = &new.Moderate + m.Moderate = val case "update": - field = &new.Update - case "": - continue + m.Update = val + case "op": + m.Op = val + } + } +} + +func (m Membership) Change(spec proto.Object) (Membership, *proto.Fail) { + new := m + for k, v := range spec.Fields { + switch k { + case "see", "put", "history", "moderate", "update", "": default: return new, &proto.Fail{"invalid", "", nil} } switch v { - case "yes": - *field = true - case "no": - *field = false + case "yes", "no": default: return new, &proto.Fail{"invalid", "", nil} } } + new.Undata(spec) return new, nil } |
