@@ -833,24 +833,32 @@ func (session *Session) isSubscribedTo(key string) bool {
833833 session .client .stateMutex .RLock ()
834834 defer session .client .stateMutex .RUnlock ()
835835
836- return slices .Contains (session .metadataSubscriptions , key )
836+ if session .metadataSubscriptions == nil {
837+ return false
838+ }
839+
840+ return session .metadataSubscriptions .Has (key )
837841}
838842
839843func (session * Session ) SubscribeTo (keys ... string ) ([]string , error ) {
840844 session .client .stateMutex .Lock ()
841845 defer session .client .stateMutex .Unlock ()
842846
847+ if session .metadataSubscriptions == nil {
848+ session .metadataSubscriptions = make (utils.HashSet [string ])
849+ }
850+
843851 var added []string
844852
845853 maxSubs := session .client .server .Config ().Metadata .MaxSubs
846854
847855 for _ , k := range keys {
848- if ! slices . Contains ( session .metadataSubscriptions , k ) {
856+ if ! session .metadataSubscriptions . Has ( k ) {
849857 if len (session .metadataSubscriptions ) > maxSubs {
850858 return added , errMetadataTooManySubs
851859 }
852860 added = append (added , k )
853- session .metadataSubscriptions = append ( session . metadataSubscriptions , k )
861+ session .metadataSubscriptions . Add ( k )
854862 }
855863 }
856864
@@ -863,27 +871,25 @@ func (session *Session) UnsubscribeFrom(keys ...string) []string {
863871
864872 var removed []string
865873
866- new := slices .DeleteFunc (session .metadataSubscriptions ,
867- func (keyName string ) bool {
868- if slices .Contains (keys , keyName ) {
869- removed = append (removed , keyName )
870- return true
871- } else {
872- return false
873- }
874- },
875- )
874+ if session .metadataSubscriptions == nil {
875+ return []string {}
876+ }
876877
877- session .metadataSubscriptions = new
878+ for k := range session .metadataSubscriptions {
879+ if slices .Contains (keys , k ) {
880+ removed = append (removed , k )
881+ session .metadataSubscriptions .Remove (k )
882+ }
883+ }
878884
879885 return removed
880886}
881887
882- func (session * Session ) MetadataSubscriptions () [] string {
888+ func (session * Session ) MetadataSubscriptions () utils. HashSet [ string ] {
883889 session .client .stateMutex .Lock ()
884890 defer session .client .stateMutex .Unlock ()
885891
886- return slices .Clone (session .metadataSubscriptions )
892+ return maps .Clone (session .metadataSubscriptions )
887893}
888894
889895func (channel * Channel ) GetMetadata (key string ) (string , error ) {
@@ -901,15 +907,15 @@ func (channel *Channel) SetMetadata(key string, value string) {
901907 channel .stateMutex .Lock ()
902908
903909 if channel .metadata == nil {
904- channel .metadata = make (MetadataStore )
910+ channel .metadata = make (map [ string ] string )
905911 }
906912
907913 channel .metadata [key ] = value
908914 channel .stateMutex .Unlock ()
909915 channel .MarkDirty (IncludeAllAttrs )
910916}
911917
912- func (channel * Channel ) ListMetadata () MetadataStore {
918+ func (channel * Channel ) ListMetadata () map [ string ] string {
913919 channel .stateMutex .RLock ()
914920 defer channel .stateMutex .RUnlock ()
915921
@@ -924,11 +930,11 @@ func (channel *Channel) DeleteMetadata(key string) {
924930 channel .MarkDirty (IncludeAllAttrs )
925931}
926932
927- func (channel * Channel ) ClearMetadata () MetadataStore {
933+ func (channel * Channel ) ClearMetadata () map [ string ] string {
928934 channel .stateMutex .Lock ()
929935
930936 oldMap := channel .metadata
931- channel .metadata = make (MetadataStore )
937+ channel .metadata = make (map [ string ] string )
932938
933939 channel .stateMutex .Unlock ()
934940 channel .MarkDirty (IncludeAllAttrs )
@@ -962,15 +968,13 @@ func (client *Client) SetMetadata(key string, value string) {
962968 defer client .stateMutex .Unlock ()
963969
964970 if client .metadata == nil {
965- client .metadata = make (MetadataStore )
971+ client .metadata = make (map [ string ] string )
966972 }
967973
968974 client .metadata [key ] = value
969-
970- // coming soon: https://www.youtube.com/watch?v=K14JkFfWUzc
971975}
972976
973- func (client * Client ) ListMetadata () MetadataStore {
977+ func (client * Client ) ListMetadata () map [ string ] string {
974978 client .stateMutex .RLock ()
975979 defer client .stateMutex .RUnlock ()
976980
@@ -984,12 +988,12 @@ func (client *Client) DeleteMetadata(key string) {
984988 delete (client .metadata , key )
985989}
986990
987- func (client * Client ) ClearMetadata () MetadataStore {
991+ func (client * Client ) ClearMetadata () map [ string ] string {
988992 client .stateMutex .Lock ()
989993 defer client .stateMutex .Unlock ()
990994
991995 oldMap := client .metadata
992- client .metadata = make (MetadataStore )
996+ client .metadata = make (map [ string ] string )
993997
994998 return oldMap
995999}
0 commit comments