extern crate either; use {Buf, BufMut}; use self::either::Either; use self::either::Either::*; use iovec::IoVec; impl<L, R> Buf for Either<L, R> where L: Buf, R: Buf, { fn remaining(&self) -> usize { match *self { Left(ref b) => b.remaining(), Right(ref b) => b.remaining(), } } fn bytes(&self) -> &[u8] { match *self { Left(ref b) => b.bytes(), Right(ref b) => b.bytes(), } } fn bytes_vec<'a>(&'a self, dst: &mut [&'a IoVec]) -> usize { match *self { Left(ref b) => b.bytes_vec(dst), Right(ref b) => b.bytes_vec(dst), } } fn advance(&mut self, cnt: usize) { match *self { Left(ref mut b) => b.advance(cnt), Right(ref mut b) => b.advance(cnt), } } fn copy_to_slice(&mut self, dst: &mut [u8]) { match *self { Left(ref mut b) => b.copy_to_slice(dst), Right(ref mut b) => b.copy_to_slice(dst), } } } impl<L, R> BufMut for Either<L, R> where L: BufMut, R: BufMut, { fn remaining_mut(&self) -> usize { match *self { Left(ref b) => b.remaining_mut(), Right(ref b) => b.remaining_mut(), } } unsafe fn bytes_mut(&mut self) -> &mut [u8] { match *self { Left(ref mut b) => b.bytes_mut(), Right(ref mut b) => b.bytes_mut(), } } unsafe fn bytes_vec_mut<'a>(&'a mut self, dst: &mut [&'a mut IoVec]) -> usize { match *self { Left(ref mut b) => b.bytes_vec_mut(dst), Right(ref mut b) => b.bytes_vec_mut(dst), } } unsafe fn advance_mut(&mut self, cnt: usize) { match *self { Left(ref mut b) => b.advance_mut(cnt), Right(ref mut b) => b.advance_mut(cnt), } } fn put_slice(&mut self, src: &[u8]) { match *self { Left(ref mut b) => b.put_slice(src), Right(ref mut b) => b.put_slice(src), } } }