1use std::error::Error;
2use std::fmt;
3
4#[derive(Debug, Clone, PartialEq)]
7pub enum IntegerOrSdlError {
8 IntegerOverflows(&'static str, u32),
9 SdlError(String),
10}
11pub fn validate_int(value: u32, name: &'static str) -> Result<::libc::c_int, IntegerOrSdlError> {
13 use self::IntegerOrSdlError::*;
14 if value >= 1 << 31 {
22 Err(IntegerOverflows(name, value))
23 } else {
24 Ok(value as ::libc::c_int)
25 }
26}
27
28impl fmt::Display for IntegerOrSdlError {
29 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
30 use self::IntegerOrSdlError::*;
31
32 match *self {
33 IntegerOverflows(name, value) => write!(f, "Integer '{}' overflows ({})", name, value),
34 SdlError(ref e) => write!(f, "SDL error: {}", e),
35 }
36 }
37}
38
39impl Error for IntegerOrSdlError {}