Trait midi2::Sysex

source ·
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§

source

type Byte

source

type PayloadIterator<'a>: Iterator<Item = Self::Byte> where B::Unit: 'a, Self: 'a

Required Methods§

source

fn payload<'a>(&'a self) -> Self::PayloadIterator<'a>
where B::Unit: 'a,

source

fn set_payload<D>(&mut self, data: D)
where D: Iterator<Item = Self::Byte>, B: BufferMut + BufferResize,

source

fn try_set_payload<D>(&mut self, data: D) -> Result<(), BufferOverflow>
where D: Iterator<Item = Self::Byte>, B: BufferMut + BufferTryResize,

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<B: Buffer> Sysex<B> for Sysex7<B>

§

type Byte = u7

§

type PayloadIterator<'a> = PayloadIterator<'a, <B as Buffer>::Unit> where B::Unit: 'a, Self: 'a

source§

impl<B: Ump> Sysex<B> for Sysex8<B>

§

type Byte = u8

§

type PayloadIterator<'a> = PayloadIterator<'a> where B: 'a