From 347a4979da2e9982ca80b877c6bf905c4c3dfe2f Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Mon, 14 Mar 2022 19:15:17 +0100 Subject: [PATCH] irc: introduce capRegistry --- irc.go | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/irc.go b/irc.go index aa725cd..8e72dae 100644 --- a/irc.go +++ b/irc.go @@ -271,7 +271,7 @@ func (m *memberships) Remove(oldMembership membership) { } func (m memberships) Format(dc *downstreamConn) string { - if !dc.caps["multi-prefix"] { + if !dc.caps.IsEnabled("multi-prefix") { if len(m) == 0 { return "" } @@ -809,3 +809,38 @@ var isupportEncoder = strings.NewReplacer(" ", "\\x20", "\\", "\\x5C") func encodeISUPPORT(s string) string { return isupportEncoder.Replace(s) } + +type capRegistry struct { + Available map[string]string + Enabled map[string]struct{} +} + +func newCapRegistry() capRegistry { + return capRegistry{ + Available: make(map[string]string), + Enabled: make(map[string]struct{}), + } +} + +func (cr *capRegistry) IsAvailable(name string) bool { + _, ok := cr.Available[name] + return ok +} + +func (cr *capRegistry) IsEnabled(name string) bool { + _, ok := cr.Enabled[name] + return ok +} + +func (cr *capRegistry) Del(name string) { + delete(cr.Available, name) + delete(cr.Enabled, name) +} + +func (cr *capRegistry) SetEnabled(name string, enabled bool) { + if enabled { + cr.Enabled[name] = struct{}{} + } else { + delete(cr.Enabled, name) + } +}