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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
/*!
This crate allows you to send various commands to storage devices, and to interpret the answers.
## Example
```
use hdd::Device;
use hdd::scsi::{SCSIDevice, SCSICommon};
let dev = Device::open("/dev/da0").unwrap();
let (sense, data) = dev.scsi_inquiry(vpd, page).unwrap();
```
TODO show how to send hand-crafted commands, or how to use porcelain interfaces.
For more, dive into documentation for the module you're interested in.
*/
#![warn(
missing_debug_implementations,
// TODO
//missing_docs,
// XXX how to limit this to C-like enums? I'd like to #[derive(Copy)] them
// see also https://github.com/rust-lang-nursery/rust-clippy/issues/2222
//missing_copy_implementations,
trivial_casts,
trivial_numeric_casts,
// XXX this crate is all about unsafe code, but we should probably limit that to certain modules
//unsafe_code,
unstable_features,
unused_import_braces,
unused_qualifications,
)]
/* XXX
This lint is here mainly to prevent trait gate method hack from becoming recursive. E.g.:
```
impl Foo<Bar> {
pub fn foo() {}
}
impl Foo<Baz> {
pub fn foo() {}
}
impl<T> Whatever for Foo<T> {
fn foo() { Self::foo() }
}
```
If `Foo<X>::foo()` is gone for some reason (usually during refactoring), `Whatever::foo()` will start calling itself, which is definitely not what we want, so this should be a hard error.
*/
#![deny(unconditional_recursion)]
#[cfg(feature = "serializable")]
#[macro_use]
extern crate serde_derive;
#[macro_use]
extern crate quick_error;
#[macro_use]
extern crate log;
#[macro_use]
extern crate nom;
extern crate regex;
extern crate byteorder;
extern crate libc;
/// Data transfer direction
#[derive(Debug, Clone, Copy)]
pub enum Direction { None, From, To, Both }
pub mod device;
pub use device::*;
#[cfg(target_os = "freebsd")]
mod cam;
pub mod ata;
pub mod scsi;
pub mod drivedb;
mod utils;