eirc 0.0.0

Event-based/Extensible Internet Relay Chat library.
Documentation
use eventbus::Event;
use super::{IrcEvent, IrcLineEvent};
use common::Side;
use common::line::IrcLine;

use std::io;

pub struct DisconnectEvent<T> {
  data: T,
  side: Side
}

impl<T> DisconnectEvent<T> {
  pub fn get_data(&self) -> &T {
    &self.data
  }
}

/* This is to impl all locked-down variants of DisconnectEvent */
macro_rules! disconnect_event {
  ($t:ty) => (
    impl DisconnectEvent<$t> {
      pub fn new(data: $t, side: Side) -> Self {
        //! Constructs a new DisconnectEvent with the given data.
        DisconnectEvent { data: data, side: side }
      }
    }
    rwlock_event!(DisconnectEvent<$t>);
  )
}

/* Macro impls */
disconnect_event!(io::Error); // I/O Error (client/server)
disconnect_event!(IrcLine); // Quit (client/server) / Kill, etc (server)
disconnect_event!(()); // Empty/None (???)

/* Generic impls */
impl<T> IrcEvent for DisconnectEvent<T> where DisconnectEvent<T>: Event {
  fn get_side(&self) -> Side {
    self.side
  }
}

/* Type-specific impls */
impl IrcLineEvent for DisconnectEvent<IrcLine> {
  fn get_line(&self) -> &IrcLine {
    &self.data
  }
}