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
56
57
58
59
60
61
62
63
64
65
66
67
#![deny(missing_docs)]

//! Library for reading and writing Elasto Mania files.

extern crate byteorder;
extern crate rand;

use std::{io, string};

/// Read and write Elasto Mania level files.
pub mod lev;
/// Read and write Elasto Mania replay files.
pub mod rec;
/// Read and write Elasto Mania state.dat files.
pub mod state;
/// Various constant values used throughout the game and library.
pub mod constants;
/// Various utility functions.
pub mod utils;

mod shared;
pub use shared::{BestTimes, Position, Time, TimeEntry};

/// General errors.
#[derive(Debug, PartialEq)]
pub enum ElmaError {
    /// Across files are not supported.
    AcrossUnsupported,
    /// Not a level file.
    InvalidLevelFile,
    /// Invalid gravity value.
    InvalidGravity(i32),
    /// Invalid object value.
    InvalidObject(i32),
    /// Invalid clipping value.
    InvalidClipping(i32),
    /// End-of-data marker mismatch.
    EODMismatch,
    /// End-of-file marker mismatch.
    EOFMismatch,
    /// Invalid event value.
    InvalidEvent(u8),
    /// End-of-replay marker mismatch.
    EORMismatch,
    /// Invalid time format.
    InvalidTimeFormat,
    /// Too short padding.
    PaddingTooShort(isize),
    /// String contains non-ASCII characters.
    NonASCII,
    /// Input/output errors from std::io use.
    Io(std::io::ErrorKind),
    /// String errors from std::String.
    StringFromUtf8(usize),
}

impl From<io::Error> for ElmaError {
    fn from(err: io::Error) -> ElmaError {
        ElmaError::Io(err.kind())
    }
}

impl From<string::FromUtf8Error> for ElmaError {
    fn from(err: string::FromUtf8Error) -> ElmaError {
        ElmaError::StringFromUtf8(err.utf8_error().valid_up_to())
    }
}