# Serial
This crate provides Rust programs with access to serial ports. Serials ports are defined as traits
to support extension through custom serial port implementations. The goals of the `serial` crate are
to support all platforms supported by Rust. Currently, only Unix TTY devices are supported.
## Usage
Add `serial` as a dependency in `Cargo.toml`:
```toml
[dependencies]
serial = "0.0.4"
```
Import the `serial` crate and everything from the `serial::prelude` module. The `serial::prelude`
module contains traits that are useful to have in scope. All the traits in `prelude` begin with
`Serial` to avoid name conflicts with other crates. Having the traits in scope avoids compiler
errors when using serial ports.
For now, you must open a serial port using a system-specific method. Once you've opened a serial
port, you can interact with it using the `SerialPort` and `SerialPortExt` traits. By depending on
the traits, your code will support future implementations of serial ports, including custom
implementations such as those for embedded systems.
```rust
extern crate serial;
use std::io;
use std::path::Path;
// import useful traits
use serial::prelude::*;
fn main() {
// opening port is system-specific
let mut port = serial::posix::TTYPort::open(&Path::new("/dev/ttyUSB0")).unwrap();
do_something(&mut port).unwrap();
}
// use SerialPort trait to program generically
fn do_something<T: SerialPort>(port: &mut T) -> io::Result<()> {
settings.set_char_size(serial::Bits8);
settings.set_parity(serial::ParityNone);
settings.set_stop_bits(serial::Stop1);
settings.set_flow_control(serial::FlowNone);
}));
// read and write to port using Read and Write traits
try!(port.read(...));
try!(port.write(...));
Ok(())
}
```
## Contributors
* [dcuddeback](https://github.com/dcuddeback)
* [willem66745](https://github.com/willem66745)
## License
Copyright © 2015 David Cuddeback
Distributed under the [MIT License](LICENSE).