rapid_recorder 0.1.0

High-performance library for tracking internal variables in concurrent Rust applications
Documentation
use crate::{
    defaults::{DefaultIndexDimmension, DefaultSamplingFrequency},
    named_usize::ValidRapidRecorderNamedUsize,
};

pub struct RapidRecorderGroup<
    SampleRate: ValidRapidRecorderNamedUsize = DefaultSamplingFrequency,
    IndexDimmension: ValidRapidRecorderNamedUsize = DefaultIndexDimmension,
> {
    pub sample_rate: Option<SampleRate>,
    pub sample_rate_value: Option<usize>,
    pub index_type: Option<IndexDimmension>,
    pub index_type_value: Option<usize>,
}

impl<SamplingFrequency: ValidRapidRecorderNamedUsize, IndexDimmension: ValidRapidRecorderNamedUsize>
    RapidRecorderGroup<SamplingFrequency, IndexDimmension>
{
    pub fn new() -> Self {
        Self {
            sample_rate: None,
            sample_rate_value: None,
            index_type: None,
            index_type_value: None,
        }
    }
    pub fn sample_rate(
        self,
        rate: SamplingFrequency,
    ) -> RapidRecorderGroup<SamplingFrequency, IndexDimmension> {
        RapidRecorderGroup {
            sample_rate: Some(rate),
            sample_rate_value: Some(rate.into()),
            index_type: self.index_type,
            index_type_value: self.index_type_value,
        }
    }

    pub fn index_type(
        self,
        index_type: IndexDimmension,
    ) -> RapidRecorderGroup<SamplingFrequency, IndexDimmension> {
        RapidRecorderGroup {
            sample_rate: self.sample_rate,
            sample_rate_value: self.sample_rate_value,
            index_type: Some(index_type),
            index_type_value: Some(index_type.into()),
        }
    }
}

impl Default for RapidRecorderGroup {
    fn default() -> Self {
        Self::new()
            .index_type(DefaultIndexDimmension::Step)
            .sample_rate(DefaultSamplingFrequency::EveryOne)
    }
}