mirror of
https://github.com/callumio/suck.git
synced 2025-12-17 03:29:21 +00:00
Each provider is enabled via a feature flag. The currently implemented providers are: - std::mpsc - flume - crossbeam_channel
75 lines
1.8 KiB
Markdown
75 lines
1.8 KiB
Markdown
# suck
|
|
|
|
Suck data up through a channel
|
|
|
|
<div align="center">
|
|
|
|
[](https://crates.io/crates/suck)
|
|
[](https://github.com/callumio/suck/actions?workflow=ci)
|
|
[](https://docs.rs/suck)
|
|
[](LICENSE)
|
|
|
|
</div>
|
|
|
|
> [!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`:
|
|
|
|
```toml
|
|
[dependencies]
|
|
suck = "*"
|
|
```
|
|
|
|
## Quick Start
|
|
|
|
```rust
|
|
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](LICENSE) file
|
|
for details.
|