mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/data/dynamic.rs')
| -rw-r--r-- | src/data/dynamic.rs | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/data/dynamic.rs b/src/data/dynamic.rs index 64616c3..7de97ff 100644 --- a/src/data/dynamic.rs +++ b/src/data/dynamic.rs @@ -1,3 +1,6 @@ +use std::error::Error; +use std::fmt; + use crate::data::{self, DataRead, DataWrite, GridPos, Serializer}; use crate::logic::LogicField; use crate::team::Team; @@ -439,6 +442,37 @@ impl From<data::ReadError> for ReadError } } +impl fmt::Display for ReadError +{ + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result + { + match self + { + ReadError::Underlying(e) => e.fmt(f), + ReadError::Type(id) => write!(f, "Invalid dynamic data type ({id})"), + ReadError::IntArrayLen(len) => write!(f, "Integer array too long ({len})"), + ReadError::Point2ArrayLen(len) => write!(f, "Point2 array too long ({len})"), + ReadError::LogicField(id) => write!(f, "Invalid logic field ({id})"), + ReadError::ByteArrayLen(len) => write!(f, "Byte array too long ({len})"), + ReadError::UnitCommand(id) => write!(f, "Invalid unit command ({id})"), + ReadError::BoolArrayLen(len) => write!(f, "Boolean array too long ({len})"), + ReadError::Vec2ArrayLen(len) => write!(f, "Vec2 array too long ({len})"), + } + } +} + +impl Error for ReadError +{ + fn source(&self) -> Option<&(dyn Error + 'static)> + { + match self + { + ReadError::Underlying(e) => Some(e), + _ => None, + } + } +} + #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub enum WriteError { @@ -458,6 +492,34 @@ impl From<data::WriteError> for WriteError } } +impl fmt::Display for WriteError +{ + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result + { + match self + { + WriteError::Underlying(e) => e.fmt(f), + WriteError::IntArrayLen(len) => write!(f, "Integer array too long ({len})"), + WriteError::Point2ArrayLen(len) => write!(f, "Point2 array too long ({len})"), + WriteError::ByteArrayLen(len) => write!(f, "Byte array too long ({len})"), + WriteError::BoolArrayLen(len) => write!(f, "Boolean array too long ({len})"), + WriteError::Vec2ArrayLen(len) => write!(f, "Vec2 array too long ({len})"), + } + } +} + +impl Error for WriteError +{ + fn source(&self) -> Option<&(dyn Error + 'static)> + { + match self + { + WriteError::Underlying(e) => Some(e), + _ => None, + } + } +} + #[cfg(test)] mod test { |