mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/data/schematic.rs')
-rw-r--r--src/data/schematic.rs61
1 files changed, 59 insertions, 2 deletions
diff --git a/src/data/schematic.rs b/src/data/schematic.rs
index 57173e9..d0928f1 100644
--- a/src/data/schematic.rs
+++ b/src/data/schematic.rs
@@ -454,6 +454,8 @@ impl fmt::Display for NewError
}
}
+impl Error for NewError {}
+
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub struct PosError
{
@@ -471,6 +473,8 @@ impl fmt::Display for PosError
}
}
+impl Error for PosError {}
+
#[derive(Debug)]
pub enum PlaceError
{
@@ -975,7 +979,7 @@ impl fmt::Display for ReadError
{
match self
{
- ReadError::Read(..) => write!(f, "Failed to read data from buffer"),
+ ReadError::Read(e) => e.fmt(f),
ReadError::Header(hdr) => write!(f, "Incorrect header ({hdr:08X})"),
ReadError::Version(ver) => write!(f, "Unsupported version ({ver})"),
ReadError::Decompress(e) => e.fmt(f),
@@ -985,12 +989,27 @@ impl fmt::Display for ReadError
ReadError::NoSuchBlock(name) => write!(f, "Unknown block {name:?}"),
ReadError::BlockCount(cnt) => write!(f, "Invalid total block count ({cnt})"),
ReadError::BlockIndex(idx, cnt) => write!(f, "Invalid block index ({idx} / {cnt})"),
- ReadError::BlockState(..) => write!(f, "Failed to read block state"),
+ ReadError::BlockState(e) => e.fmt(f),
ReadError::Placement(e) => e.fmt(f),
}
}
}
+impl Error for ReadError
+{
+ fn source(&self) -> Option<&(dyn Error + 'static)>
+ {
+ match self
+ {
+ ReadError::Read(e) => Some(e),
+ ReadError::Decompress(e) => Some(e),
+ ReadError::BlockState(e) => Some(e),
+ ReadError::Placement(e) => Some(e),
+ _ => None,
+ }
+ }
+}
+
#[derive(Debug)]
pub enum WriteError
{
@@ -1054,6 +1073,20 @@ impl fmt::Display for WriteError
}
}
+impl Error for WriteError
+{
+ fn source(&self) -> Option<&(dyn Error + 'static)>
+ {
+ match self
+ {
+ WriteError::Write(e) => Some(e),
+ WriteError::StateSerialize(e) => Some(e),
+ WriteError::Compress(e) => Some(e),
+ _ => None,
+ }
+ }
+}
+
impl<'l> SchematicSerializer<'l>
{
pub fn deserialize_base64(&mut self, data: &str) -> Result<Schematic<'l>, R64Error>
@@ -1116,6 +1149,18 @@ impl fmt::Display for R64Error
}
}
+impl Error for R64Error
+{
+ fn source(&self) -> Option<&(dyn Error + 'static)>
+ {
+ match self
+ {
+ R64Error::Base64(e) => Some(e),
+ R64Error::Content(e) => Some(e),
+ }
+ }
+}
+
#[derive(Debug)]
pub enum W64Error
{
@@ -1151,6 +1196,18 @@ impl fmt::Display for W64Error
}
}
+impl Error for W64Error
+{
+ fn source(&self) -> Option<&(dyn Error + 'static)>
+ {
+ match self
+ {
+ W64Error::Base64(e) => Some(e),
+ W64Error::Content(e) => Some(e),
+ }
+ }
+}
+
pub struct PosIter
{
x: u16,