use io_enum::*; enum Enum { A(A), B(B), } impl ::std::io::BufRead for Enum where A: ::std::io::BufRead, B: ::std::io::BufRead, { #[inline] fn fill_buf(&mut self) -> ::std::io::Result<&[u8]> { match self { Enum::A(x) => ::fill_buf(x), Enum::B(x) => ::fill_buf(x), } } #[inline] fn consume(&mut self, amt: usize) { match self { Enum::A(x) => ::consume(x, amt), Enum::B(x) => ::consume(x, amt), } } #[inline] fn read_until( &mut self, byte: u8, buf: &mut ::std::vec::Vec, ) -> ::std::io::Result { match self { Enum::A(x) => ::read_until(x, byte, buf), Enum::B(x) => ::read_until(x, byte, buf), } } #[inline] fn read_line( &mut self, buf: &mut ::std::string::String, ) -> ::std::io::Result { match self { Enum::A(x) => ::read_line(x, buf), Enum::B(x) => ::read_line(x, buf), } } } fn main() {}