pub trait Sysex<B: Buffer> {
type Byte;
type PayloadIterator<'a>: Iterator<Item = Self::Byte>
where B::Unit: 'a,
Self: 'a;
// Required methods
fn payload<'a>(&'a self) -> Self::PayloadIterator<'a>
where B::Unit: 'a;
fn set_payload<D>(&mut self, data: D)
where D: Iterator<Item = Self::Byte>,
B: BufferMut + BufferResize;
fn try_set_payload<D>(&mut self, data: D) -> Result<(), BufferOverflow>
where D: Iterator<Item = Self::Byte>,
B: BufferMut + BufferTryResize;
}Expand description
Read and write the payload data on a MIDI sysex message.
Payload data can be read as an iterator over the Sysex::Byte type.
use midi2::{sysex8::Sysex8, Sysex};
let message = Sysex8::try_from(&[
0x501E_0000,
0x0102_0304,
0x0506_0708,
0x090A_0B0C,
0x5038_000D,
0x0E0F_1011,
0x1213_0000,
0x0000_0000,
][..]).expect("Valid data");
assert_eq!(message.payload().collect::<Vec<u8>>(), (0..20).collect::<Vec<u8>>());When the backing buffer implements BufferResize payload data can be set using set_payload.
use midi2::{sysex8::Sysex8, Sysex, Data};
let mut message = Sysex8::<Vec<u32>>::new();
message.set_payload(0..20);
assert_eq!(message.data(), &[
0x501E_0000,
0x0102_0304,
0x0506_0708,
0x090A_0B0C,
0x5038_000D,
0x0E0F_1011,
0x1213_0000,
0x0000_0000,
]);When the backing buffer implements BufferTryResize payload data can be set using try_set_payload.
use midi2::{sysex8::Sysex8, Sysex, Data};
let mut message = Sysex8::<[u32; 8]>::new();
assert!(message.try_set_payload(0..20).is_ok());
assert_eq!(message.data(), &[
0x501E_0000,
0x0102_0304,
0x0506_0708,
0x090A_0B0C,
0x5038_000D,
0x0E0F_1011,
0x1213_0000,
0x0000_0000,
]);
assert!(message.try_set_payload(0..30).is_err());Required Associated Types§
type Byte
type PayloadIterator<'a>: Iterator<Item = Self::Byte> where B::Unit: 'a, Self: 'a
Required Methods§
fn payload<'a>(&'a self) -> Self::PayloadIterator<'a>where
B::Unit: 'a,
fn set_payload<D>(&mut self, data: D)
fn try_set_payload<D>(&mut self, data: D) -> Result<(), BufferOverflow>
Object Safety§
This trait is not object safe.