Skip to content

Commit

Permalink
Prepare for release 0.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
tuguzT committed Aug 19, 2022
1 parent 149b95f commit 841ec6f
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 1 deletion.
5 changes: 4 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
[package]
name = "ref_kind"
version = "0.0.0"
version = "0.1.0"
description = "Different reference kinds"
authors = ["tuguzT <timurka.tugushev@gmail.com>"]
repository = "https://github.com/toucan-rust/ref_kind"
license = "MIT OR Apache-2.0"
readme = "README.md"
keywords = ["ref", "safe", "mutability"]
categories = ["data-structures", "rust-patterns"]
edition = "2021"
45 changes: 45 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# ref_kind

[![Crate](https://img.shields.io/crates/v/ref_kind.svg)](https://crates.io/crates/ref_kind)
[![Docs](https://docs.rs/ref_kind/badge.svg)](https://docs.rs/ref_kind)
![License](https://img.shields.io/badge/license-MIT%20OR%20Apache%202.0-blue.svg)

Different reference kinds in Rust.

Provides 2 kinds of reference: immutable and mutable. All of them represented in one enum `RefKind`,
which allows you to store immutable and mutable references together.

In addition, this crate contains `RefKindMap` which is a `HashMap` of reference kinds.
This structure can easily be created from `HashMap` iterator (immutable or mutable one):

```rust
use std::collections::HashMap;
use ref_kind::RefKindMap;

let mut map = HashMap::new();
map.insert("Hello World", 0);
map.insert("The Answer to the Ultimate Question of Life, the Universe, and Everything", 42);

let mut refs = map.iter_mut().map(|(&k, v)| (k, v)).collect::<RefKindMap<_, _>>();
```

Then it can be used to retrieve multiple mutable references from the `HashMap`:

```rust
let hello = refs.move_mut("Hello World").unwrap();
let answer = refs.move_mut("The Answer to the Ultimate Question of Life, the Universe, and Everything").unwrap();

assert_eq!(*hello, 0);
assert_eq!(*answer, 42);
```

No `unsafe` code is needed!

## License

Licensed under either of

- Apache License, Version 2.0, (<http://www.apache.org/licenses/LICENSE-2.0>)
- MIT license (<http://opensource.org/licenses/MIT>)

at your option.
40 changes: 40 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,46 @@
#![forbid(unsafe_code)]

//! Different reference kinds in Rust.
//!
//! Provides 2 kinds of reference: immutable and mutable. All of them represented in one enum [`RefKind`],
//! which allows you to store immutable and mutable references together.
//!
//! In addition, this crate contains [`RefKindMap`] which is a [`HashMap`] of reference kinds.
//! This structure can easily be created from [`HashMap`] iterator (immutable or mutable one):
//!
//! ```
//! use std::collections::HashMap;
//! use ref_kind::RefKindMap;
//!
//! let mut map = HashMap::new();
//! map.insert("Hello World", 0);
//! map.insert("The Answer to the Ultimate Question of Life, the Universe, and Everything", 42);
//!
//! let mut refs = map.iter_mut().map(|(&k, v)| (k, v)).collect::<RefKindMap<_, _>>();
//! ```
//!
//! Then it can be used to retrieve multiple mutable references from the [`HashMap`]:
//!
//! ```
//! # use std::collections::HashMap;
//! # use ref_kind::RefKindMap;
//! #
//! # let mut map = HashMap::new();
//! # map.insert("Hello World", 0);
//! # map.insert("The Answer to the Ultimate Question of Life, the Universe, and Everything", 42);
//! #
//! # let mut refs = map.iter_mut().map(|(&k, v)| (k, v)).collect::<RefKindMap<_, _>>();
//! #
//! let hello = refs.move_mut("Hello World").unwrap();
//! let answer = refs.move_mut("The Answer to the Ultimate Question of Life, the Universe, and Everything").unwrap();
//!
//! assert_eq!(*hello, 0);
//! assert_eq!(*answer, 42);
//! ```
//!
//! No `unsafe` code is needed!
//!
//! [`HashMap`]: std::collections::HashMap
pub use kind::RefKind;
pub use map::RefKindMap;
Expand Down

0 comments on commit 841ec6f

Please sign in to comment.