clack_common/events/spaces/
core.rs1use crate::events::event_types::*;
2use crate::events::{Event, EventSpace, UnknownEvent};
3use std::ffi::CStr;
4use std::fmt::{Debug, Formatter};
5
6#[derive(Copy, Clone, PartialEq)]
30pub enum CoreEventSpace<'a> {
31 NoteOn(&'a NoteOnEvent),
33 NoteOff(&'a NoteOffEvent),
35 NoteChoke(&'a NoteChokeEvent),
37 NoteEnd(&'a NoteEndEvent),
39 NoteExpression(&'a NoteExpressionEvent),
41 ParamValue(&'a ParamValueEvent),
43 ParamMod(&'a ParamModEvent),
45 ParamGestureBegin(&'a ParamGestureBeginEvent),
47 ParamGestureEnd(&'a ParamGestureEndEvent),
49 Transport(&'a TransportEvent),
51 Midi(&'a MidiEvent),
53 Midi2(&'a Midi2Event),
55 MidiSysEx(&'a MidiSysExEvent),
57}
58
59unsafe impl<'a> EventSpace<'a> for CoreEventSpace<'a> {
61 const NAME: &'static CStr = c"";
62
63 unsafe fn from_unknown(event: &'a UnknownEvent) -> Option<Self> {
67 use CoreEventSpace::*;
68
69 match event.header().type_id() {
70 NoteOnEvent::TYPE_ID => Some(NoteOn(event.as_event_unchecked())),
71 NoteOffEvent::TYPE_ID => Some(NoteOff(event.as_event_unchecked())),
72 NoteChokeEvent::TYPE_ID => Some(NoteChoke(event.as_event_unchecked())),
73 NoteEndEvent::TYPE_ID => Some(NoteEnd(event.as_event_unchecked())),
74 NoteExpressionEvent::TYPE_ID => Some(NoteExpression(event.as_event_unchecked())),
75 ParamValueEvent::TYPE_ID => Some(ParamValue(event.as_event_unchecked())),
76 ParamModEvent::TYPE_ID => Some(ParamMod(event.as_event_unchecked())),
77 TransportEvent::TYPE_ID => Some(Transport(event.as_event_unchecked())),
78 MidiEvent::TYPE_ID => Some(Midi(event.as_event_unchecked())),
79 Midi2Event::TYPE_ID => Some(Midi2(event.as_event_unchecked())),
80 MidiSysExEvent::TYPE_ID => Some(MidiSysEx(event.as_event_unchecked())),
81 _ => None,
82 }
83 }
84
85 #[inline]
86 fn as_unknown(&self) -> &'a UnknownEvent {
87 match self {
88 CoreEventSpace::NoteOn(e) => e.as_unknown(),
89 CoreEventSpace::NoteOff(e) => e.as_unknown(),
90 CoreEventSpace::NoteChoke(e) => e.as_unknown(),
91 CoreEventSpace::NoteEnd(e) => e.as_unknown(),
92 CoreEventSpace::NoteExpression(e) => e.as_unknown(),
93 CoreEventSpace::ParamValue(e) => e.as_unknown(),
94 CoreEventSpace::ParamMod(e) => e.as_unknown(),
95 CoreEventSpace::Transport(e) => e.as_unknown(),
96 CoreEventSpace::Midi(e) => e.as_unknown(),
97 CoreEventSpace::Midi2(e) => e.as_unknown(),
98 CoreEventSpace::MidiSysEx(e) => e.as_unknown(),
99 CoreEventSpace::ParamGestureBegin(e) => e.as_unknown(),
100 CoreEventSpace::ParamGestureEnd(e) => e.as_unknown(),
101 }
102 }
103}
104
105impl Debug for CoreEventSpace<'_> {
106 #[inline]
107 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
108 match self {
109 CoreEventSpace::NoteOn(e) => Debug::fmt(e, f),
110 CoreEventSpace::NoteOff(e) => Debug::fmt(e, f),
111 CoreEventSpace::NoteChoke(e) => Debug::fmt(e, f),
112 CoreEventSpace::NoteEnd(e) => Debug::fmt(e, f),
113 CoreEventSpace::NoteExpression(e) => Debug::fmt(e, f),
114 CoreEventSpace::ParamValue(e) => Debug::fmt(e, f),
115 CoreEventSpace::ParamMod(e) => Debug::fmt(e, f),
116 CoreEventSpace::ParamGestureBegin(e) => Debug::fmt(e, f),
117 CoreEventSpace::ParamGestureEnd(e) => Debug::fmt(e, f),
118 CoreEventSpace::Transport(e) => Debug::fmt(e, f),
119 CoreEventSpace::Midi(e) => Debug::fmt(e, f),
120 CoreEventSpace::Midi2(e) => Debug::fmt(e, f),
121 CoreEventSpace::MidiSysEx(e) => Debug::fmt(e, f),
122 }
123 }
124}