nom_midi/parser/event/
mod.rs1mod meta;
2mod midi;
3mod sysex;
4
5use crate::types::{Event, EventType};
6
7pub use self::{
8 meta::parse_meta_event,
9 midi::parse_midi_event,
10 sysex::{parse_escape_sequence, parse_sysex_message},
11};
12use super::util::parse_var_length;
13use nom::IResult;
14
15pub fn parse_event(i: &[u8]) -> IResult<&[u8], Event> {
16 use nom::{branch::alt, combinator::map};
17 let (i, delta_time) = parse_var_length(i)?;
18 let (i, event) = alt((
19 map(parse_midi_event, EventType::Midi),
20 map(parse_sysex_message, EventType::SystemExclusive),
21 map(parse_escape_sequence, EventType::EscapeSequence),
22 map(parse_meta_event, EventType::Meta),
23 ))(i)?;
24 Ok((
25 i,
26 Event {
27 delta_time: delta_time,
28 event: event,
29 },
30 ))
31}