diff options
author | Marcel Müller <neikos@neikos.email> | 2023-01-05 10:43:42 +0100 |
---|---|---|
committer | Marcel Müller <neikos@neikos.email> | 2023-01-05 10:52:19 +0100 |
commit | e4c2a2110c4ce227ed116fda08077f57441565e7 (patch) | |
tree | d5458829e30dfe7857dd1de4f43902f3cd429a61 | |
parent | b958d9405bbd89ad70334ea9fdc4a7ba997b76ce (diff) |
Implement topic filtering behaviour
Signed-off-by: Marcel Müller <neikos@neikos.email>
-rw-r--r-- | src/server/mod.rs | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/server/mod.rs b/src/server/mod.rs index 0354363..17f1f97 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -250,7 +250,27 @@ impl<LH: LoginHandler, SH: SubscriptionHandler> MqttServer<LH, SH> { match message { Ok(message) => { - if topics.iter().any(|_topic| todo!()) { + if topics.iter().any(|topic| { + let msg_topic = TopicFilter::parse_from(message.topic().to_string()); + + let mut i = 0; + loop { + match (topic.get(i), msg_topic.get(i)) { + (None, None) => break true, + (None, Some(_)) => break false, + (Some(_), None) => break false, + (Some(TopicFilter::MultiWildcard), Some(_)) => break true, + (Some(TopicFilter::SingleWildcard), Some(_)) => (), + (Some(left), Some(right)) => { + if left != right { + break false; + } + } + } + + i += 1; + } + }) { callback(message).await; } } |