add support for barometric pressure
This commit is contained in:
36
internal/mqttingest/topic_match.go
Normal file
36
internal/mqttingest/topic_match.go
Normal file
@@ -0,0 +1,36 @@
|
||||
package mqttingest
|
||||
|
||||
import "strings"
|
||||
|
||||
// TopicMatches reports whether a topic filter (with + or # wildcards) matches a topic name.
|
||||
// It follows the MQTT v3.1.1 wildcard rules and supports shared subscriptions ($share).
|
||||
func TopicMatches(filter, topic string) bool {
|
||||
return matchTopic(routeSplit(filter), strings.Split(topic, "/"))
|
||||
}
|
||||
|
||||
func matchTopic(route []string, topic []string) bool {
|
||||
if len(route) == 0 {
|
||||
return len(topic) == 0
|
||||
}
|
||||
if len(topic) == 0 {
|
||||
return route[0] == "#"
|
||||
}
|
||||
if route[0] == "#" {
|
||||
return true
|
||||
}
|
||||
if route[0] == "+" || route[0] == topic[0] {
|
||||
return matchTopic(route[1:], topic[1:])
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// routeSplit removes $share/group/ when matching shared subscription filters.
|
||||
func routeSplit(route string) []string {
|
||||
if strings.HasPrefix(route, "$share/") {
|
||||
parts := strings.Split(route, "/")
|
||||
if len(parts) > 2 {
|
||||
return parts[2:]
|
||||
}
|
||||
}
|
||||
return strings.Split(route, "/")
|
||||
}
|
||||
Reference in New Issue
Block a user