melodium-engine 0.10.0

Mélodium core engine and executor implementation
Documentation
use crate::transmission::{BlindOutput, Output};
use melodium_common::executive::{Output as ExecutiveOutput, Outputs as OutputsTrait};
use std::collections::HashMap;

#[derive(Debug)]
pub struct Outputs {
    outputs: HashMap<String, Output>,
}

impl Outputs {
    pub fn new(outputs: HashMap<String, Output>) -> Self {
        Self { outputs }
    }
}

impl OutputsTrait for Outputs {
    fn get(&mut self, output: &str) -> Box<dyn ExecutiveOutput> {
        self.outputs
            .remove(output)
            .map(|output| Box::new(output) as Box<dyn ExecutiveOutput>)
            .unwrap_or_else(|| Box::new(BlindOutput::new()))
    }
}