midi_toolkit/events/
event.rs1use 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}