vessel/README.md
2025-05-22 11:38:06 +02:00

52 lines
1.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Vessel
`vessel::Vessel` is a simple, immutable value bag for Rust inspired by Go's `context.Context`, but focused solely on storing and propagating context in a simple manner.
## ✨ Features
- Immutable: setting a value returns a new `Vessel`.
- Ordered: uses a `BTreeMap` internally for deterministic iteration.
- Ergonomic: fluent API with zero dependencies (aside from the standard library).
- Useful for threading context-like metadata (e.g., request IDs, tenant info) through application layers.
## 📦 Example
```rust
use vessel::Vessel;
let vessel = Vessel::new();
let vessel = vessel.with_value("request_id", "abc-123");
assert_eq!(vessel.get_value("request_id"), Some(&"abc-123".to_string()));
````
## 📚 API
```rust
pub fn new() -> Self;
pub fn with_value(&self, key: &str, value: &str) -> Self;
pub fn get_value(&self, key: &str) -> Option<&String>;
pub fn get_values(&self) -> &BTreeMap<String, String>;
```
* `with_value`: Adds a key-value pair to the vessel, returning a new instance.
* `get_value`: Retrieves a value for a given key.
* `get_values`: Returns all key-value pairs.
## 🧪 Tests
Run tests with:
```bash
cargo test
```
## 🔒 Stability
The crate is small and intentionally limited in scope. You can depend on its behavior being stable.
## 📜 License
MIT