1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use serde::{Deserialize, Serialize};
use crate::utils::errors::SimulationError;
use crate::utils::evaluate_polynomial;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
enum ThinningFunction {
Polynomial { coefficients: Vec<f64> },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Thinning {
function: ThinningFunction,
}
impl Thinning {
pub fn evaluate(self, point: f64) -> Result<f64, SimulationError> {
match &self.function {
ThinningFunction::Polynomial { coefficients } => {
evaluate_polynomial(&coefficients, point)
}
}
}
}