# pin-utils

Utilities for pinning

[![Build Status](https://travis-ci.com/rust-lang-nursery/pin-utils.svg?branch=master)](https://travis-ci.com/rust-lang-nursery/pin-utils)
[![Crates.io](https://img.shields.io/crates/v/pin-utils.svg)](https://crates.io/crates/pin-utils)

[Documentation](https://docs.rs/pin-utils)

## Usage

First, add this to your `Cargo.toml`:

```toml
[dependencies]
pin-utils = "0.1.0-alpha.4"
```

Now, you can use it:

```rust
use pin_utils::pin_mut; // And more...
```

The current version of pin-utils requires Rust 1.33 or later.

# License

This project is licensed under either of

 * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
   http://www.apache.org/licenses/LICENSE-2.0)
 * MIT license ([LICENSE-MIT](LICENSE-MIT) or
   http://opensource.org/licenses/MIT)

at your option.

### Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in pin-utils by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.
