mirror of
https://github.com/callumio/suck.git
synced 2025-12-16 11:09:22 +00:00
Suck data up through a channel
https://docs.rs/suck/latest
| .github | ||
| src | ||
| .envrc | ||
| .gitignore | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| cliff.toml | ||
| flake.lock | ||
| flake.nix | ||
| LICENSE | ||
| README.md | ||
| release-plz.toml | ||
| rust-toolchain.toml | ||
| rustfmt.toml | ||
suck
Suck data up through a channel
Warning
This is unstable, untested and subject to change - use at your own risk.
Features
- Pull-based communication: Consumers request values on-demand
- Contextual values: Designed for current state rather than event streams
- Flexible sources: Support both static values and dynamic closures
Installation
Add this to your Cargo.toml:
[dependencies]
suck = "*"
Quick Start
use suck::sync::StdSuck;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Create a pair (using default std backend)
let (sucker, sourcer) = StdSuck::<i32>::pair();
// Start producer in a thread
let producer = std::thread::spawn(move || {
// Set a static value
sourcer.set_static(42).unwrap();
// Or set a dynamic closure
sourcer.set(|| {
// Generate fresh values each time
42 * 2
}).unwrap();
// Run the producer loop
sourcer.run().unwrap();
});
// Consumer pulls values
let value = sucker.get()?;
println!("Got value: {}", value);
// Clean up
sucker.close()?;
producer.join().unwrap();
Ok(())
}
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.