ReSet-Lib 0.6.3

Data structure library for ReSet
Documentation
pub enum Status {
    RUNNING,
    SUSPENDED,
    IDLE,
}

pub enum Channel {
    MONO,
    STEREO,
}

#[derive(PartialEq, Eq, Debug)]
pub struct Volume {
    value: u32,
}

impl Volume {
    pub fn from_i32(value: i32) -> Option<Self> {
        match value {
            i if i < 0 => None,
            i if i > 100 => None,
            _ => Some(Volume {
                value: value as u32,
            }),
        }
    }

    pub fn add(&mut self, value: i32) {
        let temporary = self.value as i32 + value;
        match temporary {
            i if i > 100 => self.value = 100,
            i if i < 0 => self.value = 0,
            _ => self.value = temporary as u32,
        }
    }
}

pub struct Source {
    id: u32,
    name: String,
    volume: Volume,
    status: Status,
    channel: Channel,
}

pub struct Sink {
    id: u32,
    name: String,
    volume: Volume,
    status: Status,
    channel: Channel,
}

pub struct Audio {
    default_sink: Sink,
    default_source: Source,
    sinks: Vec<Sink>,
    sources: Vec<Source>,
}

#[test]
fn volume_test() {
    let failvolume = Volume::from_i32(101);
    assert!(failvolume.is_none());
    let failvolume = Volume::from_i32(-1);
    assert!(failvolume.is_none());
    let volume = Volume::from_i32(78);
    assert!(volume.is_some());
    let mut volume = volume.unwrap();
    volume.add(200);
    assert_eq!(Volume::from_i32(100).unwrap(), volume);
}