midi-toolkit-rs 0.3.1

A library for ultra high performance MIDI operations, designed for black MIDI. The library isn't perfect
Documentation
use super::{event_variants::*, BatchTempo};
use super::{MIDIEvent, SerializeEvent};
use crate::io::MIDIWriteError;

use derive::EventImpl;
use std::io::Write;

#[derive(EventImpl, Debug, PartialEq)]
pub enum Event {
    #[key]
    #[channel]
    #[playback]
    NoteOn(NoteOnEvent),
    #[key]
    #[channel]
    #[playback]
    NoteOff(NoteOffEvent),
    #[key]
    #[channel]
    #[playback]
    PolyphonicKeyPressure(Box<PolyphonicKeyPressureEvent>),
    #[channel]
    #[playback]
    ControlChange(Box<ControlChangeEvent>),
    #[channel]
    #[playback]
    ProgramChange(Box<ProgramChangeEvent>),
    #[channel]
    #[playback]
    ChannelPressure(Box<ChannelPressureEvent>),
    #[channel]
    #[playback]
    PitchWheelChange(Box<PitchWheelChangeEvent>),
    SystemExclusiveMessage(Box<SystemExclusiveMessageEvent>),
    Undefined(Box<UndefinedEvent>),
    SongPositionPointer(Box<SongPositionPointerEvent>),
    SongSelect(Box<SongSelectEvent>),
    TuneRequest(Box<TuneRequestEvent>),
    EndOfExclusive(Box<EndOfExclusiveEvent>),
    TrackStart(Box<TrackStartEvent>),
    Text(Box<TextEvent>),
    UnknownMeta(Box<UnknownMetaEvent>),
    Color(Box<ColorEvent>),
    #[channel]
    ChannelPrefix(Box<ChannelPrefixEvent>),
    #[channel]
    MIDIPort(Box<MIDIPortEvent>),
    Tempo(Box<TempoEvent>),
    SMPTEOffset(Box<SMPTEOffsetEvent>),
    TimeSignature(Box<TimeSignatureEvent>),
    KeySignature(Box<KeySignatureEvent>),
}

impl Event {}

impl BatchTempo for Event {
    fn inner_tempo(&self) -> Option<u32> {
        match self {
            Event::Tempo(e) => Some(e.tempo),
            _ => None,
        }
    }

    fn without_tempo(self) -> Option<Self> {
        match self {
            Event::Tempo(_) => None,
            _ => Some(self),
        }
    }
}