X-Git-Url: https://code.octet-stream.net/m17rt/blobdiff_plain/21873f99445730506caeab640432413ed23df674..64599440f241f7bb897a95b72ed7130231966518:/m17app/src/tnc.rs?ds=inline diff --git a/m17app/src/tnc.rs b/m17app/src/tnc.rs index 921585b..ef30e38 100644 --- a/m17app/src/tnc.rs +++ b/m17app/src/tnc.rs @@ -6,9 +6,21 @@ use std::io::{Read, Write}; /// via a working implementation of try_clone(). We do not require `Clone` directly /// as this could not be fulfilled by `TcpStream`. pub trait Tnc: Read + Write + Sized + Send + 'static { + /// Return a copy of this TNC. + /// + /// `M17App` will use this to create a second instance of the supplied TNC then use + /// one of them for reading and one of them for writing, concurrently across two threads. + /// + /// Implementations do not need to worry about trying to make two simultaneous reads or + /// two simultaneous writes do something sensible. `M17App` will not do this and it would + /// probably produce garbled KISS messages anyway. fn try_clone(&mut self) -> Result; - fn start(&mut self) -> Result<(), TncError>; - fn close(&mut self) -> Result<(), TncError>; + + /// Start I/O. + fn start(&mut self); + + /// Shut down I/O - it is assumed we cannot restart. + fn close(&mut self); } #[derive(Debug, PartialEq, Eq, Clone)] @@ -22,13 +34,11 @@ impl Tnc for std::net::TcpStream { std::net::TcpStream::try_clone(self).map_err(|_| TncError::Unknown) } - fn start(&mut self) -> Result<(), TncError> { + fn start(&mut self) { // already started, hopefully we get onto reading the socket quickly - Ok(()) } - fn close(&mut self) -> Result<(), TncError> { - self.shutdown(std::net::Shutdown::Both) - .map_err(|_| TncError::Unknown) + fn close(&mut self) { + let _ = self.shutdown(std::net::Shutdown::Both); } }