nom_midi/parser/event/
mod.rs

1mod 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}