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