52 lines
1.3 KiB
Markdown
52 lines
1.3 KiB
Markdown
# 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
|
||
|