diff --git a/Cargo.toml b/Cargo.toml index f9e95fb..a40937e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ description = "Decode SMBIOS/DMI information into accessible data structures" documentation = "https://docs.rs/dmidecode/" repository = "https://github.com/jcreekmore/dmidecode" license = "MIT" -rust-version = "1.62" +rust-version = "1.69" [dependencies] bitflags = "1.2" @@ -16,5 +16,5 @@ pretty_assertions = "0.6" lazy_static = "1.4" [features] -default = [] +default = ["std"] std = [] diff --git a/README.md b/README.md new file mode 100644 index 0000000..72972af --- /dev/null +++ b/README.md @@ -0,0 +1,68 @@ +# dmidecode + +[github](https://github.com/jcreekmore/dmidecode) +[crates.io](https://crates.io/crates/dmidecode) +[docs.rs](https://docs.rs/dmidecode) +[build status](https://github.com/jcreekmore/dmidecode/actions?query=branch%3Amaster) + +A Rust library for parsing raw **SMBIOS/DMI tables**. This crate lets you read and decode system firmware information provided via `/sys/firmware/dmi/tables/` on Linux, or directly from memory dumps. + +```toml +# Cargo.toml +[dependencies] +dmidecode = "0.9" +``` + +## Example + +```rust +use dmidecode::Structure; + +fn main() -> Result<(), Box> { + eprintln!("Collecting DMI Information..."); + + // Get the SMBIOS header and DMI table from sysfs. + let buf = std::fs::read("/sys/firmware/dmi/tables/smbios_entry_point")?; + let dmi = std::fs::read("/sys/firmware/dmi/tables/DMI")?; + let entry = dmidecode::EntryPoint::search(&buf)?; + + for table in entry.structures(&dmi) { + let Ok(table) = table else { + eprintln!("DMI tables contain malformed structure: {table:?}"); + continue; + }; + + match table { + Structure::System(system) => { + // do stuff + } + Structure::BaseBoard(base_board) => { + // do stuff + } + // ... + _ => continue, + } + } + + Ok(()) +} +``` + + +## No-std support + +In no_std mode, almost all of the same API is available and works the same way. +To depend on `dmidecode` in `no_std` mode, disable our default enabled "std" feature in +`Cargo.toml`. + +```toml +[dependencies] +dmidecode = { version = "0.9", default-features = false } +``` + +## Rust Version Support +The minimum supported Rust version is documented in the Cargo.toml file. This may be bumped in minor releases as necessary. + +## License + +`dmidecode` is released under the terms of the [MIT](./LICENSE) license.