mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/data/dynamic.rs')
-rw-r--r--src/data/dynamic.rs62
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
{