in consumer/consumer.go [1148:1182]
func buildSubscriptionData(topic string, selector MessageSelector) *internal.SubscriptionData {
subData := &internal.SubscriptionData{
Topic: topic,
SubString: selector.Expression,
ExpType: string(selector.Type),
}
subData.SubVersion = time.Now().UnixNano()
if selector.Type != "" && selector.Type != TAG {
return subData
}
if selector.Expression == "" || selector.Expression == _SubAll {
subData.ExpType = string(TAG)
subData.SubString = _SubAll
} else {
tags := strings.Split(selector.Expression, "||")
subData.Tags = utils.NewSet()
subData.Codes = utils.NewSet()
for idx := range tags {
trimString := strings.Trim(tags[idx], " ")
if trimString != "" {
if _, ok := subData.Tags.Contains(trimString); !ok {
subData.Tags.AddKV(trimString, trimString)
}
hCode := utils.HashString(trimString)
v := strconv.Itoa(hCode)
if _, ok := subData.Codes.Contains(v); !ok {
subData.Codes.AddKV(v, v)
}
}
}
}
return subData
}