# pluralistic-rs
## Overview
The `pluralistic-rs` library is a Rust crate providing functionality to calculate quadratic funding distributions based
on a set of contributions. The library includes a robust implementation for generating random contributions, managing
contributions, and applying quadratic funding formulas to distribute a matching pot of funds.
## Features
- **Quadratic Funding Calculation**: Calculate funding distributions using the `calculate_linear_qf` function.
- **Matching Upscale**: Upscale matching to saturate a round.
- **Matching Cap Strategies**: Apply different cap strategies (`Cap` and `Redistribute`) using `MatchingCapStrategy`.
- **Random Contribution Generation**: Generate random contributions with the `Random` trait implemented
for `Contribution`.
## Installation
Add `pluralistic-rs` to your `Cargo.toml` dependencies:
```toml
[dependencies]
pluralistic-rs = "0.1.0"
```
## Usage
1. **Defining Contributions**: Contributions are represented by the `Contribution` struct, which includes sender,
recipient, and amount details.
1. **Calculating Distributions**: Use `calculate_linear_qf` to calculate the quadratic funding distribution based on the
contributions, matching pot, and options provided.
2. **Applying Cap Strategies**: Utilize the `MatchingCapStrategy` to define how contributions are capped or
redistributed when necessary.
3. **Generating Random Contributions**: Use the `Random` trait to generate random contributions for testing and
simulation purposes.
## Example
```rust
use pluralistic_rs::{Contribution, calculate_linear_qf, LinearQfOptions, Random};
fn main() {
// Generate random contributions
let contributions = vec![Contribution::rnd(), Contribution::rnd(), ...];
// Define options for quadratic funding calculation
let options = LinearQfOptions {
matching_cap_amount: Some(1000.0),
matching_cap_strategy: MatchingCapStrategy::Cap,
..Default::default()
};
// Calculate distributions
let distributions = calculate_linear_qf(contributions, 5000.0, options);
// Process distributions...
}
```
## Testing
The library includes a `tests` module with test cases to ensure the functionality works as expected.
## Dependencies
- `rand`: Used for generating random contributions and other randomness-related functionalities.
## License
MIT