fanctl 0.6.0

Fancontrol replacement in Rust with YAML configuration
use serde::{Serialize, Deserialize};
use std::{
    collections::LinkedList,
};

#[derive(Debug, PartialEq, Serialize, Deserialize)]
pub struct RuleBinding {
    pub outputs: LinkedList<String>,
    pub rule: Rule,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum Rule {
    Static(f64),
    Maximum(Vec<Box<Rule>>),
    GateCritical {
        input: String,
        value: f64,
    },
    GateStatic {
        input: String,
        threshold: f64,
        value: f64,
    },
    Curve {
        input: String,
        keys: Vec<CurvePoint>,
        out_of_bounds_value: Option<f64>,
    },
    Smooth {
        rule: Box<Rule>,
        samples: usize
    },
}

#[derive(Debug, PartialEq, Clone, Copy, Serialize, Deserialize)]
pub struct CurvePoint {
    pub input: f64,
    pub output: f64,
}