Rust bindings and safe wrappers for citro3d
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

46 lines
1.5 KiB

//! General-purpose error and result types returned by public APIs of this crate.
use std::num::TryFromIntError;
use std::sync::TryLockError;
/// The common result type returned by `citro3d` functions.
pub type Result<T> = std::result::Result<T, Error>;
// TODO probably want a similar type to ctru::Result to make it easier to convert
// nonzero result codes to errors.
/// The common error type that may be returned by `citro3d` functions.
#[non_exhaustive]
#[derive(Debug)]
pub enum Error {
/// C3D error code.
System(libc::c_int),
/// A C3D object or context could not be initialized.
FailedToInitialize,
/// A size parameter was specified that cannot be converted to the proper type.
InvalidSize,
/// Failed to select the given render target for drawing to.
InvalidRenderTarget,
/// Indicates that a reference could not be obtained because a lock is already
/// held on the requested object.
LockHeld,
/// Indicates that too many vertex attributes were registered (max 12 supported).
TooManyAttributes,
/// Indicates that too many vertex buffer objects were registered (max 12 supported).
TooManyBuffers,
/// The given memory could not be converted to a physical address for sharing
/// with the GPU. Data should be allocated with [`ctru::linear`].
InvalidMemoryLocation,
}
impl From<TryFromIntError> for Error {
fn from(_: TryFromIntError) -> Self {
Self::InvalidSize
}
}
impl<T> From<TryLockError<T>> for Error {
fn from(_: TryLockError<T>) -> Self {
Self::LockHeld
}
}