summaryrefslogtreecommitdiff
path: root/src/conditions.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'src/conditions.lisp')
-rw-r--r--src/conditions.lisp53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/conditions.lisp b/src/conditions.lisp
new file mode 100644
index 0000000..5b57fbf
--- /dev/null
+++ b/src/conditions.lisp
@@ -0,0 +1,53 @@
+;; This file is part of eris-cl.
+;; Copyright (C) 2022 Piotr SzarmaƄski
+
+;; eris-cl is free software: you can redistribute it and/or modify it under the
+;; terms of the GNU Lesser General Public License as published by the Free
+;; Software Foundation, either version 3 of the License, or (at your option) any
+;; later versqion.
+
+;; eris-cl is distributed in the hope that it will be useful, but WITHOUT ANY
+;; WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+;; A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License along with
+;; eris-cl. If not, see <https://www.gnu.org/licenses/>.
+
+(in-package :eris)
+
+(define-constant +eris-revision+ "0.3" :test #'equalp)
+
+(define-condition eris-condition () ())
+
+(define-condition missing-block (eris-condition error)
+ ((reference :initarg :reference :reader reference))
+ (:report (lambda (condition stream)
+ (format stream "Missing block: ~a" (reference condition)))))
+
+(define-condition padding-error (eris-condition error)
+ ()
+ (:report "Corrupted padding."))
+
+(define-condition version-mismatch (eris-condition error)
+ ()
+ (:report (lambda (condition stream)
+ (declare (ignore condition))
+ (format stream "Provided object has been encoded with a different version of the ERIS standard than ~a." +eris-revision+))))
+
+(define-condition eof (eris-condition error)
+ ((eof :initarg :eof :reader eof)
+ (pos :initarg :position :reader pos))
+ (:report (lambda (condition stream)
+ (with-slots (eof pos) condition
+ (format stream "End of file (~d) reached at ~d." eof pos)))))
+
+(define-condition hash-mismatch (eris-condition error)
+ ((reference :initarg :reference :reader reference)
+ (hash :initarg :hash :reader hash))
+ (:report (lambda (condition stream)
+ (format stream "The hash ~a does not match the reference ~a." (hash condition) (reference condition)))))
+
+(define-condition invalid-internal-block (eris-condition error)
+ ((reference :initarg :reference :reader reference))
+ (:report (lambda (condition stream)
+ (format stream "The internal block ~a is invalid." (reference condition)))))