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) Undata(spec proto.Object) { m.Yes = true for k, v := range spec.Fields { val := v == "yes" switch k { case "see": m.See = val case "put": m.Put = val case "history": m.History = val case "moderate": m.Moderate = val case "update": 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", "no": default: return new, &proto.Fail{"invalid", "", nil} } } new.Undata(spec) 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), }} }