#![crate_name = "coremidi"]
#![crate_type = "lib"]
#![doc(html_root_url = "https://chris-zen.github.io/coremidi/")]
mod client;
mod device;
mod endpoints;
mod entity;
mod events;
mod notifications;
mod object;
mod packets;
mod ports;
mod properties;
mod protocol;
use core_foundation_sys::base::OSStatus;
use coremidi_sys::{MIDIFlushOutput, MIDIRestart};
pub use crate::client::{Client, NotifyCallback};
pub use crate::device::Device;
pub use crate::endpoints::destinations::{Destination, Destinations, VirtualDestination};
pub use crate::endpoints::endpoint::Endpoint;
pub use crate::endpoints::sources::{Source, Sources, VirtualSource};
pub use crate::entity::Entity;
pub use crate::events::{EventBuffer, EventList, EventListIter, EventPacket, Timestamp};
pub use crate::notifications::{AddedRemovedInfo, IoErrorInfo, Notification, PropertyChangedInfo};
pub use crate::object::{Object, ObjectType};
pub use crate::packets::{Packet, PacketBuffer, PacketList, PacketListIterator};
pub use crate::ports::{InputPort, InputPortWithContext, OutputPort};
pub use crate::properties::{
BooleanProperty, IntegerProperty, Properties, PropertyGetter, PropertySetter, StringProperty,
};
pub use crate::protocol::Protocol;
pub fn flush() -> Result<(), OSStatus> {
let status = unsafe { MIDIFlushOutput(0) };
unit_result_from_status(status)
}
pub fn restart() -> Result<(), OSStatus> {
let status = unsafe { MIDIRestart() };
unit_result_from_status(status)
}
fn result_from_status<T, F: FnOnce() -> T>(status: OSStatus, f: F) -> Result<T, OSStatus> {
match status {
0 => Ok(f()),
_ => Err(status),
}
}
fn unit_result_from_status(status: OSStatus) -> Result<(), OSStatus> {
result_from_status(status, || ())
}