streamcraft 0.0.1

General purpose data/multimedia pipeline framework
Documentation
// Copyright (C) 2024  MAlba124 <marlhan@proton.me>
//
// StreamCraft is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// StreamCraft is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with StreamCraft.  If not, see <https://www.gnu.org/licenses/>.

#[derive(Debug)]
pub enum Error {
    NoThreadHandle,
    FailedToJoinThread,
    NoSinkMessageSender,
    NoSinkMessageReceiver,
    MessageSinkFailed,
    NoSinkElement,
    PipelineNotReady,
    NoSinkDatagramSender,
    FailedToRecvFromParent,
    ReceivedInvalidDatagramFromParent,
    ReceivedInvalidDatagramFromSink,
    ReceiveFromSinkFailed,
    MessageParentFailed,
    NoParentMessageSender,
    InvalidSinkType,
}

impl std::error::Error for Error {}

impl std::fmt::Display for Error {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(
            f,
            "{}",
            match self {
                Self::NoThreadHandle => "No thread handle",
                Self::FailedToJoinThread => "Failed to join thread",
                Self::NoSinkMessageSender => "No sink message sender",
                Self::NoSinkMessageReceiver => "No sink message receiver",
                Self::MessageSinkFailed => "Message sink failed",
                Self::NoSinkElement => "No sink element",
                Self::PipelineNotReady => "Pipeline is not ready",
                Self::NoSinkDatagramSender => "No sink datagram sender",
                Self::FailedToRecvFromParent => "Failed to recv from parent",
                Self::ReceivedInvalidDatagramFromParent => "Received invalid datagram from parent",
                Self::ReceivedInvalidDatagramFromSink => "Received invalid datagram from sink",
                Self::ReceiveFromSinkFailed => "Receive from sink failed",
                Self::MessageParentFailed => "Message parent failed",
                Self::NoParentMessageSender => "No parent message sender",
                Self::InvalidSinkType => "Invalid sink type",
            }
        )
    }
}