use std::sync::PoisonError; use sdl2::IntegerOrSdlError; use sdl2::video::WindowBuildError; pub type EmulatorResult = Result; #[derive(Clone, Debug)] pub enum EmulatorError { SdlError(String), AllocationError, IOError(String), MutexInvalidState(String) } impl From for EmulatorError { fn from(value: String) -> Self { Self::SdlError(value) } } impl From for EmulatorError { fn from(value: WindowBuildError) -> Self { Self::SdlError(value.to_string()) } } impl From for EmulatorError { fn from(value: IntegerOrSdlError) -> Self { match value { IntegerOrSdlError::IntegerOverflows(x, y) => { Self::SdlError(format!("{} - {}", x, y)) } IntegerOrSdlError::SdlError(str) => { Self::SdlError(str) } } } } impl From for EmulatorError{ fn from(value: std::io::Error) -> Self { Self::IOError(value.to_string()) } } impl From> for EmulatorError{ fn from(value: PoisonError) -> Self { Self::MutexInvalidState(value.to_string()) } }