pks-session 0.1.0

Session declaration and lifecycle composition for PocketStation
use pks_frame::{EndpointId, SessionId, StemId};

#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]
pub enum SessionError {
    #[error("session must contain at least one capture source")]
    NoSources,
    #[error("stem {stem_id:?} has no destination route")]
    NoRoutes { stem_id: StemId },
    #[error("invalid source selector: {reason}")]
    InvalidSelector { reason: String },
    #[error("endpoint descriptor is invalid: {reason}")]
    InvalidEndpoint { reason: String },
    #[error("route descriptor is invalid: {reason}")]
    InvalidRoute { reason: String },
    #[error("endpoint belongs to session {actual:?}, expected {expected:?}")]
    ForeignEndpoint {
        expected: SessionId,
        actual: SessionId,
    },
    #[error("session draft {session_id:?} is already frozen")]
    DraftFrozen { session_id: SessionId },
    #[error("session draft lock is poisoned")]
    DraftPoisoned,
    #[error("session identifier space is exhausted")]
    IdExhausted,
    #[error("unsupported SessionSpec version {major}.{minor}")]
    UnsupportedVersion { major: u16, minor: u16 },
    #[error("route references unknown endpoint {endpoint_id:?}")]
    UnknownEndpoint { endpoint_id: EndpointId },
    #[error("route references unknown stem {stem_id:?}")]
    UnknownStem { stem_id: StemId },
}