use std::path::PathBuf;
use image::ImageError;
use lofty::error::LoftyError;
use lunar_lib::database::{DatabaseError, TransactionError};
use thiserror::Error;
use crate::media_container::{Codec, ContainerFormat};
#[derive(Debug, Error)]
pub enum CodecError {
#[error("Unknown or unsupported codec: {0}")]
Unknown(String),
#[error("Codec '{0:?}' is missing an encoder")]
NoEncoder(Codec),
#[error("A codec is missing a symphonia decoder")]
NoDecoder,
#[error("Codec '{0:?}' is an unsupported codec")]
UnsupportedCodec(Codec),
}
#[derive(Debug, Error)]
pub enum ContainerError {
#[error("IoError: {0}")]
Io(#[from] std::io::Error),
#[error("Codec Error: {0}")]
Codec(#[from] CodecError),
#[error("Symphonia Error: {0}")]
Symphonia(#[from] symphonia::core::errors::Error),
#[error("File '{0}' has no tracks/streams")]
NoStream(PathBuf),
#[error("File '{0}' has an unsupported container")]
InvalidSource(PathBuf),
#[error("'{0:?}' is an unsupported container")]
UnsupportedContainer(ContainerFormat),
#[error("Couldn't find sample rate")]
NoSampleRate,
#[error("Couldn't find channel count'")]
NoChannelCount,
}
#[derive(Error, Debug)]
pub enum LibraryError {
#[error(
"Failed to update library because no library directory set (Try 'musicmanager library set --help)"
)]
NoLibrary,
}
#[derive(Debug, Error)]
pub enum ExtractError {
#[error("IoError: {0}")]
Io(#[from] std::io::Error),
#[error("LoftyError: {0}")]
Lofty(#[from] LoftyError),
#[error("DatabaseError: {0}")]
Database(#[from] DatabaseError),
#[error("Transaction Error: {0}")]
Transaction(#[from] TransactionError),
#[error("Container Error: {0}")]
Container(#[from] ContainerError),
#[error("Format Error: {0}")]
Format(#[from] lunar_lib::formatter::FormatError),
#[error("InvalidContainer Error")]
InvalidContainer,
}
#[derive(Debug, Error)]
pub enum OrphanRelinkError {
#[error("IoError: {0}")]
Io(#[from] std::io::Error),
#[error("Database Error: {0}")]
Database(#[from] DatabaseError),
#[error("Transaction Error: {0}")]
Transaction(#[from] TransactionError),
#[error("Library Error: {0}")]
Library(#[from] LibraryError),
}
#[derive(Debug, Error)]
pub enum ImportError {
#[error("IoError: {0}")]
Io(#[from] std::io::Error),
#[error("Lofty Error: {0}")]
Lofty(#[from] LoftyError),
#[error("Codec Error: {0}")]
Codec(#[from] CodecError),
#[error("Database Error: {0}")]
Database(#[from] DatabaseError),
#[error("Transaction Error: {0}")]
Transaction(#[from] TransactionError),
#[error("Container Error: {0}")]
Container(#[from] ContainerError),
#[error("Metadata Error: {0}")]
Metadata(#[from] MetadataError),
#[error("Library Error: {0}")]
Library(#[from] LibraryError),
}
#[derive(Debug, Error)]
pub enum MetadataError {
#[error("IoError: {0}")]
Io(#[from] std::io::Error),
#[error("Database Error: {0}")]
Database(#[from] DatabaseError),
#[error("Transaction Error: {0}")]
Transaction(#[from] TransactionError),
#[error("Lofty Error: {0}")]
Lofty(#[from] LoftyError),
#[error("Image Error: {0}")]
Image(#[from] ImageError),
}