Skip to content

Commit

Permalink
docs: add content to readme
Browse files Browse the repository at this point in the history
  • Loading branch information
willothy committed Nov 3, 2024
1 parent ddf7a29 commit f5a88c6
Showing 1 changed file with 127 additions and 2 deletions.
129 changes: 127 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,127 @@
# Whirlwind
# 🌀 Whirlwind

A fully asynchronous sharded hashmap for Rust.
[![Build Status](https://img.shields.io/github/actions/workflow/status/fortress-build/whirlwind/rust.yml?branch=main)](https://github.com/yourusername/shardmap/actions)
[![Crates.io](https://img.shields.io/crates/v/whirlwind)](https://crates.io/crates/whirlwind)
[![Docs.rs](https://docs.rs/whirlwind/badge.svg)](https://docs.rs/whirlwind)
[![License](https://img.shields.io/crates/l/whirlwind)](https://github.com/fortress-build/whirlwind/blob/main/LICENSE)

An asynchronous, sharded `HashMap` for high-performance concurrent data access
in Rust.

## 📖 Table of Contents

- [Features](#-features)
- [Installation](#-installation)
- [Usage](#-usage)
- [Examples](#-examples)
- [Benchmark](#-benchmark)
- [Contributing](#-contributing)
- [License](#license)

## ✨ Features

- **Async Ready**: Seamless integration with Rust's `async`/`await` syntax.
- **High Performance**: Sharding minimizes lock contention in concurrent environments.
- **Thread-safe**: Safe for use across multiple threads without fear of data races.
- **Familiar API**: Intuitive `HashMap`-like interface for ease of adoption.
- **Customizable Shards**: Configure the number of shards to optimize for your workload.

## 📦 Installation

Add `whirlwind` to your `Cargo.toml`:

```toml
[dependencies]
whirlwind = "0.1.0"
```

## 🔧 Usage

Here's a quick example to get you started:

```rust
use whirlwind::ShardMap;

#[tokio::main]
async fn main() {
let map = ShardMap::new();

map.insert("apple", 3).await;
map.insert("banana", 5).await;

if let Some(quantity) = map.get(&"apple").await {
println!("We have {} apples!", quantity);
}

map.remove(&"banana").await;
}
```

## 📚 Examples

### Concurrent Inserts

```rust
use whirlwind::ShardMap;
use tokio::task::JoinSet;

#[tokio::main]
async fn main() {
let map = ShardMap::new();
let tasks: JoinSet<_> = (0..1000).map(|i| {
let map = map.clone();
tokio::spawn(async move {
map.insert(i, i * 2).await;
})
}).collect();

tasks.join_all().await.ok();

assert_eq!(map.len().await, 1000);
}
```

### Custom Shard Count

```rust
use whirlwind::ShardMap;

#[tokio::main]
async fn main() {
let map = ShardMap::with_shards(64); // Initialize with 64 shards
// Use the map as needed
}
```

## 📊 Benchmark

> TODO: Add benchmark figures
## 🤝 Contributing

Contributions are welcome! Please follow these steps:

1. Fork the repository.
2. Create a new branch: `git checkout -b feature/your-feature`.
3. Commit your changes: `git commit -am 'Add your feature'`.
4. Push to the branch: `git push origin feature/your-feature`.
5. Open a pull request.

### Running Tests

Ensure all tests pass before submitting a PR:

```sh
cargo test
```

### Code Style

We use `rustfmt` for code formatting:

```sh
cargo fmt -- --check
```

## License

Expand All @@ -17,3 +138,7 @@ distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

---

Made with 💖 and Rust.

0 comments on commit f5a88c6

Please sign in to comment.