rytm-rs 0.1.3

More than safe rust abstractions over rytm-sys, an unofficial SDK for Analog Rytm MKII running firmware 1.70
Documentation
use crate::error::ConversionError;
use rytm_sys::ar_global_t;
use serde::{Deserialize, Serialize};

/// Sequencer configuration.
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
pub struct SequencerConfig {
    kit_reload_on_chg: bool,
    quantize_live_rec: bool,
    auto_trk_switch: bool,
}

impl Default for SequencerConfig {
    fn default() -> Self {
        Self {
            kit_reload_on_chg: false,
            quantize_live_rec: false,
            auto_trk_switch: true,
        }
    }
}

impl TryFrom<&ar_global_t> for SequencerConfig {
    type Error = ConversionError;
    fn try_from(raw_global: &ar_global_t) -> Result<Self, Self::Error> {
        Ok(Self {
            kit_reload_on_chg: raw_global.kit_reload_on_chg != 0,
            quantize_live_rec: raw_global.quantize_live_rec != 0,
            auto_trk_switch: raw_global.auto_trk_switch != 0,
        })
    }
}

impl SequencerConfig {
    pub(crate) fn apply_to_raw_global(self, raw_global: &mut ar_global_t) {
        raw_global.kit_reload_on_chg = self.kit_reload_on_chg as u8;
        raw_global.quantize_live_rec = self.quantize_live_rec as u8;
        raw_global.auto_trk_switch = self.auto_trk_switch as u8;
    }

    pub fn set_kit_reload_on_chg(&mut self, kit_reload_on_chg: bool) {
        self.kit_reload_on_chg = kit_reload_on_chg;
    }

    pub fn set_quantize_live_rec(&mut self, quantize_live_rec: bool) {
        self.quantize_live_rec = quantize_live_rec;
    }

    pub fn set_auto_trk_switch(&mut self, auto_trk_switch: bool) {
        self.auto_trk_switch = auto_trk_switch;
    }

    pub const fn kit_reload_on_chg(&self) -> bool {
        self.kit_reload_on_chg
    }

    pub const fn quantize_live_rec(&self) -> bool {
        self.quantize_live_rec
    }

    pub const fn auto_trk_switch(&self) -> bool {
        self.auto_trk_switch
    }
}