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}