1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
use crate::vk::VkResult; use std::result; pub type Result<T> = result::Result<T, Error>; #[derive(Debug)] pub enum ErrorCode { VkResult(VkResult), FFI(std::ffi::NulError), SuitablePhysicalDeviceNotFound, SuitableBufferMemoryTypeNotFound, ShaderLoadIO(std::io::Error), ShaderLoadUnaligned, } #[derive(Debug)] pub struct Error { u: Box<ErrorCode> } impl From<VkResult> for Error { fn from(code: VkResult) -> Self { Error { u: Box::new(ErrorCode::VkResult(code)) } } } impl From<std::ffi::NulError> for Error { fn from(error: std::ffi::NulError) -> Self { Error { u: Box::new(ErrorCode::FFI(error)) } } } impl From<ErrorCode> for Error { fn from(code: ErrorCode) -> Self { Error { u: Box::new(code) } } } impl VkResult { pub fn into_result(self) -> Result<()> { if self == VkResult::VK_SUCCESS { Ok(()) } else { Err(Error::from(self)) } } }