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), }} }