# efw [![Latest Version]][crates.io] [![Build Status]][travis]
[Build Status]: https://travis-ci.org/Richard-W/efw.svg?branch=master
[travis]: https://travis-ci.org/Richard-W/efw
[Latest Version]: https://img.shields.io/crates/v/efw.svg
[crates.io]: https://crates.io/crates/efw
**Framework for writing UEFI application**
---
## State of development
The types in this crate do not yet wrap the entirety of the UEFI spec. Currently
only a subset of UEFI functions are defined. Some types (`SystemTable`) for
example allow you access lower layers though (via the `bits()` method).
## Getting started
This is a hello world application using efw:
```rust
#![no_std]
#![no_main]
#[macro_use] extern crate efw;
#[no_mangle]
fn efw_main() {
println!("Hello, world!");
}
```
`efw` reexports the contents of the `alloc` crate so you can use dynamic memory allocation:
```rust
#![no_std]
#![no_main]
#[macro_use] extern crate efw;
#[no_mangle]
fn efw_main() {
let vector = vec![1, 2, 3];
println!("Allocated vector: {:?}", vector);
}
```
## Protocol support
efw provides a set of predefined protocols that are needed for it to function
properly. You can extend the set of protocols though by implementing the
`Protocol` trait. That trait provides methods for finding handles supporting
the protocol.