pocketstation 1.0.1

Source-aware desktop audio Session SDK
Documentation
use pocketstation::{
    Session, SessionSourceError, SourceConfiguration, SourceFactory, SourceInstanceHandle,
    SourceInstanceId, SourceOutputHandle, SourceTypeId,
};
use std::sync::Arc;

fn register_source_signature(
    session: &Session,
    factory: Arc<dyn SourceFactory>,
) -> Result<(), SessionSourceError> {
    session.register_source(factory)
}

mod session {
    mod external_source {
        use super::super::*;

        #[test]
        fn given_public_session_when_external_source_declared_then_handles_are_nameable() {
            let _registration_api: fn(
                &Session,
                Arc<dyn SourceFactory>,
            ) -> Result<(), SessionSourceError> = register_source_signature;
            let session = Session::new();
            let source: SourceInstanceHandle = session
                .source(
                    SourceTypeId::new("org.example.source-a.v1").unwrap(),
                    SourceConfiguration::default(),
                )
                .unwrap();
            let output: SourceOutputHandle = source.output("signal").unwrap();

            assert_eq!(source.instance_id(), SourceInstanceId::new(1));
            assert_eq!(source.source_id(), output.source_id());
            assert_eq!(source.instance_id(), output.source_instance_id());
            assert_eq!(output.output_port(), "signal");
            assert_ne!(output.stream_id().get(), 0);
        }
    }
}