vtil_parser/error.rs
1// BSD 3-Clause License
2//
3// Copyright © 2020-2021 Keegan Saunders
4// Copyright © 2020-2021 VTIL Project
5// All rights reserved.
6//
7// Redistribution and use in source and binary forms, with or without
8// modification, are permitted provided that the following conditions are met:
9//
10// 1. Redistributions of source code must retain the above copyright notice, this
11// list of conditions and the following disclaimer.
12//
13// 2. Redistributions in binary form must reproduce the above copyright notice,
14// this list of conditions and the following disclaimer in the documentation
15// and/or other materials provided with the distribution.
16//
17// 3. Neither the name of the copyright holder nor the names of its
18// contributors may be used to endorse or promote products derived from
19// this software without specific prior written permission.
20//
21// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
25// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31//
32
33use std::{fmt, io, num, str};
34use thiserror::Error;
35
36/// Custom `Error` for VTIL reading/writing
37#[derive(Error, Debug)]
38pub enum Error {
39 /// An error occured during parsing due to a malformed VTIL file
40 #[error("Malformed VTIL file")]
41 Malformed(String),
42
43 /// An I/O error occured
44 #[error("I/O error")]
45 Io(#[from] io::Error),
46
47 /// Error inside of [Scroll](https://docs.rs/scroll) occured
48 #[error("Scroll error")]
49 Scroll(#[from] scroll::Error),
50
51 /// Error during UTF-8 decoding, VTIL file is possibly malformed
52 #[error("UTF-8 decoding error")]
53 Utf8(#[from] str::Utf8Error),
54
55 /// Error during internal formatting
56 #[error("Formatting error")]
57 Formatting(#[from] fmt::Error),
58
59 /// Overflowing during writing
60 #[error("Encoding error, value overflowed")]
61 TryFromInt(#[from] num::TryFromIntError),
62
63 /// Operand does not have expected type (immediate or register)
64 #[error("Operand type mismatch")]
65 OperandTypeMismatch,
66
67 /// Operator has unexpected operand count
68 #[error("Operand count mismatch")]
69 OperandMismatch,
70}