#![deny(missing_docs, missing_debug_implementations)]
pub mod convert;
pub mod gm;
use redact_composer_core::derive::Element;
use redact_composer_core::render::{AdhocRenderer, RenderEngine, Renderer};
use redact_composer_core::IntoCompositionSegment;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
pub mod elements {
pub use super::{DrumKit, Program};
}
pub fn renderers() -> RenderEngine {
RenderEngine::new() + DrumKit::renderer() + gm::renderers()
}
#[derive(Element, Debug)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct Program(pub u8);
#[derive(Element, Debug, Copy, Clone)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct DrumKit(pub u8);
impl DrumKit {
pub fn renderer() -> impl Renderer<Element = Self> {
AdhocRenderer::<Self>::new(|segment, _| {
Ok(vec![
Program::from(segment.element).into_segment(segment.timing)
])
})
}
}
impl From<DrumKit> for Program {
fn from(value: DrumKit) -> Self {
Program(value.0)
}
}
impl From<&DrumKit> for Program {
fn from(value: &DrumKit) -> Self {
Program(value.0)
}
}
impl From<u8> for DrumKit {
fn from(value: u8) -> Self {
DrumKit(value)
}
}
impl From<&u8> for DrumKit {
fn from(value: &u8) -> Self {
DrumKit(*value)
}
}