rusmes_core/matchers/
sender_is.rs1use crate::matcher::Matcher;
4use async_trait::async_trait;
5use rusmes_proto::{Mail, MailAddress};
6
7pub struct SenderIsMatcher {
9 senders: Vec<String>,
10}
11
12impl SenderIsMatcher {
13 pub fn new(senders: Vec<String>) -> Self {
15 Self { senders }
16 }
17}
18
19#[async_trait]
20impl Matcher for SenderIsMatcher {
21 async fn match_mail(&self, mail: &Mail) -> anyhow::Result<Vec<MailAddress>> {
22 if let Some(sender) = mail.sender() {
23 let sender_str = sender.as_string();
24 if self.senders.iter().any(|s| sender_str.contains(s)) {
25 return Ok(mail.recipients().to_vec());
26 }
27 }
28 Ok(Vec::new())
29 }
30
31 fn name(&self) -> &str {
32 "SenderIs"
33 }
34}