jellymodel 0.1.1

Data models for jellybeanidle
Documentation
use bnum::types::U2048;
use serde::{Deserialize, Serialize};
use std::ops::Add;

#[derive(Serialize, Deserialize, Copy, Clone, Debug)]
pub struct CompLevel {
    count: U2048,
    rate: u64,
}
impl Default for CompLevel {
    fn default() -> Self {
        Self::new()
    }
}
impl Add<CompLevel> for CompLevel {
    type Output = Self;

    fn add(self, other: CompLevel) -> Self {
        Self {
            count: self.count + other.count,
            rate: self.rate + self.rate,
        }
    }
}

impl CompLevel {
    pub fn new() -> Self {
        Self {
            count: 0u8.into(),
            rate: 0u64,
        }
    }
    pub fn add_rate(&mut self, rate: u64) {
        self.rate = &self.rate + rate;
    }
    pub fn add_count(&mut self, count: u64) {
        self.count = self.count + count;
    }
    pub fn big_add_count(&mut self, count: U2048) {
        self.count = &self.count + count;
    }
    pub fn rate(&self) -> &u64 {
        &self.rate
    }
    pub fn count(&self) -> &U2048 {
        &self.count
    }
}

#[derive(Serialize, Deserialize, Copy, Clone, Debug)]
pub struct Comp {
    pub l1: CompLevel,
    pub l2: CompLevel,
    rate: u64,
}
impl Default for Comp {
    fn default() -> Self {
        Self::new()
    }
}
impl Add<Comp> for Comp {
    type Output = Self;
    fn add(self, other: Comp) -> Self {
        Self {
            l1: self.l1 + other.l1,
            l2: self.l2 + other.l2,
            rate: self.rate + other.rate,
        }
    }
}

impl Comp {
    pub fn new() -> Self {
        Self {
            l1: CompLevel::new(),
            l2: CompLevel::new(),
            rate: 0u64,
        }
    }
    pub fn add_rate(&mut self, rate: u64) {
        self.rate = &self.rate + rate;
    }
    pub fn rate(&self) -> &u64 {
        &self.rate
    }
}