1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
use std::io; use std::fs; use std::path; use std::net; pub struct Usb {} pub struct Serial {} #[derive(Debug)] pub struct Network { _host: String, _port: u16, stream: net::TcpStream } impl Network { pub fn new(host: &str, port: u16) -> Network { let stream = net::TcpStream::connect((host, port)).unwrap(); Network{ _host: host.to_string(), _port: port, stream: stream } } } impl io::Write for Network { fn write(&mut self, buf: &[u8]) -> io::Result<usize> { self.stream.write(buf) } fn flush(&mut self) -> io::Result<()> { self.stream.flush() } } #[derive(Debug)] pub struct File<W> { _path: String, fobj: W } impl <W: io::Write> File<W> { pub fn new<P: AsRef<path::Path> + ToString>(path: P) -> File<fs::File> { let fobj = fs::OpenOptions::new() .write(true) .create(true) .open(&path) .unwrap(); File{_path: path.to_string(), fobj: fobj} } pub fn from(path: &str, fobj: W) -> File<W>{ File{_path: path.to_string(), fobj: fobj} } } impl <W: io::Write> io::Write for File<W> { fn write(&mut self, buf: &[u8]) -> io::Result<usize> { self.fobj.write(buf) } fn flush(&mut self) -> io::Result<()> { self.fobj.flush() } }