Skip to main content

sim_lib_stream_host/
eval_site.rs

1//! Shared stream evaluation-site traits for cataloged host devices.
2
3use sim_kernel::{Result, Symbol};
4use sim_lib_midi_live::LiveMidiSession;
5
6use crate::placement::{DeviceRecord, Placement};
7
8/// Open stream site returned by a device catalog.
9pub trait StreamEvalSite: Send {
10    /// Returns the placement tier used by this site.
11    fn placement(&self) -> &Placement;
12
13    /// Returns the catalog row that opened this site.
14    fn device_record(&self) -> &DeviceRecord;
15
16    /// Returns a provider-owned live MIDI session for this site, when opening
17    /// the site also opened a real MIDI transport.
18    fn live_midi_session(&self) -> Option<Result<LiveMidiSession>> {
19        None
20    }
21
22    /// Closes the site.
23    fn close(self: Box<Self>) -> Result<()>;
24}
25
26/// Provider of cataloged stream devices.
27pub trait DeviceProvider: Send + Sync {
28    /// Enumerates devices owned by this provider.
29    fn enumerate(&self) -> Result<Vec<DeviceRecord>>;
30
31    /// Opens one provider-owned device by catalog id.
32    ///
33    /// This is provider-level dispatch for an already checked catalog row.
34    /// Public catalog opens should use
35    /// [`DeviceCatalog::open_checked`](crate::DeviceCatalog::open_checked).
36    fn open(&self, id: &Symbol) -> Result<Box<dyn StreamEvalSite>>;
37}