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
32
33
34
35
36
37
//! Shared stream evaluation-site traits for cataloged host devices.
use sim_kernel::{Result, Symbol};
use sim_lib_midi_live::LiveMidiSession;
use crate::placement::{DeviceRecord, Placement};
/// Open stream site returned by a device catalog.
pub trait StreamEvalSite: Send {
/// Returns the placement tier used by this site.
fn placement(&self) -> &Placement;
/// Returns the catalog row that opened this site.
fn device_record(&self) -> &DeviceRecord;
/// Returns a provider-owned live MIDI session for this site, when opening
/// the site also opened a real MIDI transport.
fn live_midi_session(&self) -> Option<Result<LiveMidiSession>> {
None
}
/// Closes the site.
fn close(self: Box<Self>) -> Result<()>;
}
/// Provider of cataloged stream devices.
pub trait DeviceProvider: Send + Sync {
/// Enumerates devices owned by this provider.
fn enumerate(&self) -> Result<Vec<DeviceRecord>>;
/// Opens one provider-owned device by catalog id.
///
/// This is provider-level dispatch for an already checked catalog row.
/// Public catalog opens should use
/// [`DeviceCatalog::open_checked`](crate::DeviceCatalog::open_checked).
fn open(&self, id: &Symbol) -> Result<Box<dyn StreamEvalSite>>;
}