diff options
Diffstat (limited to 'src/conditions.lisp')
-rw-r--r-- | src/conditions.lisp | 53 |
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))))) |