midi_toolkit/events/
event.rs

1use super::{event_variants::*, BatchTempo};
2use super::{MIDIEvent, SerializeEvent};
3use crate::io::MIDIWriteError;
4
5use derive::EventImpl;
6use std::io::Write;
7
8#[derive(EventImpl, Debug, PartialEq)]
9pub enum Event {
10    #[key]
11    #[channel]
12    #[playback]
13    NoteOn(NoteOnEvent),
14    #[key]
15    #[channel]
16    #[playback]
17    NoteOff(NoteOffEvent),
18    #[key]
19    #[channel]
20    #[playback]
21    PolyphonicKeyPressure(Box<PolyphonicKeyPressureEvent>),
22    #[channel]
23    #[playback]
24    ControlChange(Box<ControlChangeEvent>),
25    #[channel]
26    #[playback]
27    ProgramChange(Box<ProgramChangeEvent>),
28    #[channel]
29    #[playback]
30    ChannelPressure(Box<ChannelPressureEvent>),
31    #[channel]
32    #[playback]
33    PitchWheelChange(Box<PitchWheelChangeEvent>),
34    SystemExclusiveMessage(Box<SystemExclusiveMessageEvent>),
35    Undefined(Box<UndefinedEvent>),
36    SongPositionPointer(Box<SongPositionPointerEvent>),
37    SongSelect(Box<SongSelectEvent>),
38    TuneRequest(Box<TuneRequestEvent>),
39    EndOfExclusive(Box<EndOfExclusiveEvent>),
40    TrackStart(Box<TrackStartEvent>),
41    Text(Box<TextEvent>),
42    UnknownMeta(Box<UnknownMetaEvent>),
43    Color(Box<ColorEvent>),
44    #[channel]
45    ChannelPrefix(Box<ChannelPrefixEvent>),
46    #[channel]
47    MIDIPort(Box<MIDIPortEvent>),
48    Tempo(Box<TempoEvent>),
49    SMPTEOffset(Box<SMPTEOffsetEvent>),
50    TimeSignature(Box<TimeSignatureEvent>),
51    KeySignature(Box<KeySignatureEvent>),
52}
53
54impl Event {}
55
56impl BatchTempo for Event {
57    fn inner_tempo(&self) -> Option<u32> {
58        match self {
59            Event::Tempo(e) => Some(e.tempo),
60            _ => None,
61        }
62    }
63
64    fn without_tempo(self) -> Option<Self> {
65        match self {
66            Event::Tempo(_) => None,
67            _ => Some(self),
68        }
69    }
70}