Add the report registration
This commit is contained in:
parent
11f3712138
commit
82fe5e24de
3 changed files with 50 additions and 1 deletions
|
@ -48,6 +48,29 @@ impl FromStr for Event {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl ToString for Event {
|
||||||
|
fn to_string(&self) -> String {
|
||||||
|
let s = match self {
|
||||||
|
Event::LinkConnect => "link-connect",
|
||||||
|
Event::LinkDisconnect => "link-disconnect",
|
||||||
|
Event::LinkIdentify => "link-identify",
|
||||||
|
Event::LinkTls => "link-tls",
|
||||||
|
Event::TxBegin => "tx-begin",
|
||||||
|
Event::TxMail => "tx-mail",
|
||||||
|
Event::TxRcpt => "tx-rcpt",
|
||||||
|
Event::TxEnvelope => "tx-envelope",
|
||||||
|
Event::TxData => "tx-data",
|
||||||
|
Event::TxCommit => "tx-commit",
|
||||||
|
Event::TxRollback => "tx-rollback",
|
||||||
|
Event::ProtocolClient => "protocol-client",
|
||||||
|
Event::ProtocolServer => "protocol-server",
|
||||||
|
Event::Timeout => "timeout",
|
||||||
|
Event::FilterResponse => "filter-response",
|
||||||
|
};
|
||||||
|
String::from(s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct TimeVal {
|
pub struct TimeVal {
|
||||||
pub sec: i64,
|
pub sec: i64,
|
||||||
|
|
|
@ -17,7 +17,7 @@ pub enum Callback<T> {
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct EventHandler<T> {
|
pub struct EventHandler<T> {
|
||||||
event: MatchEvent,
|
pub(crate) event: MatchEvent,
|
||||||
callback: Callback<T>,
|
callback: Callback<T>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -75,6 +75,31 @@ pub struct SmtpIn<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Clone + Default + 'static> SmtpIn<T> {
|
impl<T: Clone + Default + 'static> SmtpIn<T> {
|
||||||
|
fn register_events(&self) {
|
||||||
|
let mut evts = Vec::new();
|
||||||
|
for eh in self.event_handlers.iter() {
|
||||||
|
match eh.event {
|
||||||
|
MatchEvent::Evt(ref v) => {
|
||||||
|
for e in v.iter() {
|
||||||
|
evts.push(e);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
MatchEvent::All => {
|
||||||
|
println!("register|report|smtp-in|*");
|
||||||
|
evts.clear();
|
||||||
|
break ;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
evts.dedup();
|
||||||
|
for e in evts.iter() {
|
||||||
|
println!("register|report|smtp-in|{}", e.to_string());
|
||||||
|
}
|
||||||
|
// TODO: register filters
|
||||||
|
// println!("register|filter|smtp-in|{}", "name");
|
||||||
|
println!("register|ready");
|
||||||
|
}
|
||||||
|
|
||||||
/// Read a line from the standard input.
|
/// Read a line from the standard input.
|
||||||
/// Since EOF should not append, it is considered as an error.
|
/// Since EOF should not append, it is considered as an error.
|
||||||
fn read(&self) -> Result<String, Error> {
|
fn read(&self) -> Result<String, Error> {
|
||||||
|
@ -144,6 +169,7 @@ impl<T: Clone + Default + 'static> SmtpIn<T> {
|
||||||
|
|
||||||
/// Run the infinite loop that will read and process input from stdin.
|
/// Run the infinite loop that will read and process input from stdin.
|
||||||
pub fn run(&mut self) {
|
pub fn run(&mut self) {
|
||||||
|
self.register_events();
|
||||||
loop {
|
loop {
|
||||||
let line = match self.read() {
|
let line = match self.read() {
|
||||||
Ok(l) => l,
|
Ok(l) => l,
|
||||||
|
|
Reference in a new issue