#[macro_export]
macro_rules! implread {
($name:ident, ($($(#[cfg($cfg:ident = $val:tt)])? $op:ident),*)) => {
impl Read for $name {
fn read(&mut self, buf: &mut [u8]) -> IoResult<usize> {
match self {
$($(#[cfg($cfg = $val)])? $name::$op(s) => s.read(buf),)*
}
}
}
};
($name:ident, $life:lifetime, ($($(#[cfg($cfg:ident = $val:tt)])? $op:ident),*)) => {
impl<$life> Read for $name<$life> {
fn read(&mut self, buf: &mut [u8]) -> IoResult<usize> {
match self {
$($(#[cfg($cfg = $val)])? $name::$op(s) => s.read(buf),)*
}
}
}
};
}
#[macro_export]
macro_rules! implbufread {
($name:ident, ($($(#[cfg($cfg:ident = $val:tt)])? $op:ident),*)) => {
impl BufRead for $name {
fn fill_buf(&mut self) -> IoResult<&[u8]> {
match self {
$($(#[cfg($cfg = $val)])? $name::$op(s) => s.fill_buf(),)*
}
}
fn consume(&mut self, amt: usize) {
match self {
$($(#[cfg($cfg = $val)])? $name::$op(s) => s.consume(amt),)*
}
}
}
};
($name:ident, $life:lifetime, ($($(#[cfg($cfg:ident = $val:tt)])? $op:ident),*)) => {
impl<$life> BufRead for $name<$life> {
fn fill_buf(&mut self) -> IoResult<&[u8]> {
match self {
$($(#[cfg($cfg = $val)])? $name::$op(s) => s.fill_buf(),)*
}
}
fn consume(&mut self, amt: usize) {
match self {
$($(#[cfg($cfg = $val)])? $name::$op(s) => s.consume(amt),)*
}
}
}
};
}
#[macro_export]
macro_rules! implwrite {
($name:ident, ($($(#[cfg($cfg:ident = $val:tt)])? $op:ident $(.$ex:ident())?),*)) => {
impl Write for $name {
fn write(&mut self, buf: &[u8]) -> IoResult<usize> {
match self {
$($(#[cfg($cfg = $val)])? $name::$op(s) => s$(.$ex())?.write(buf),)*
}
}
fn flush(&mut self) -> IoResult<()> {
match self {
$($(#[cfg($cfg = $val)])? $name::$op(s) => s$(.$ex())?.flush(),)*
}
}
}
};
($name:ident, $life:lifetime, ($($(#[cfg($cfg:ident = $val:tt)])? $op:ident $(.$ex:ident())?),*)) => {
impl<$life> Write for $name<$life> {
fn write(&mut self, buf: &[u8]) -> IoResult<usize> {
match self {
$($(#[cfg($cfg = $val)])? $name::$op(s) => s$(.$ex())?.write(buf),)*
}
}
fn flush(&mut self) -> IoResult<()> {
match self {
$($(#[cfg($cfg = $val)])? $name::$op(s) => s$(.$ex())?.flush(),)*
}
}
}
};
}
#[macro_export]
macro_rules! implgets {
($name:ident, ($($(#[cfg($cfg:ident = $val:tt)])? $op:ident),*)) => {
impl GetRefMut for $name {
fn get_ref(&self) -> &Stream {
match self {
$($(#[cfg($cfg = $val)])? $name::$op(s) => s.get_ref(),)*
}
}
fn get_mut(&mut self) -> &mut Stream {
match self {
$($(#[cfg($cfg = $val)])? $name::$op(s) => s.get_mut(),)*
}
}
}
};
($name:ident, $life:lifetime, ($($(#[cfg($cfg:ident = $val:tt)])? $op:ident),*)) => {
impl<$life> GetRefMut for $name<$life> {
fn get_ref(&self) -> &Stream {
match self {
$($(#[cfg($cfg = $val)])? $name::$op(s) => s.get_ref(),)*
}
}
fn get_mut(&mut self) -> &mut Stream {
match self {
$($(#[cfg($cfg = $val)])? $name::$op(s) => s.get_mut(),)*
}
}
}
};
}