iota_package_resolver/
error.rs

1// Copyright (c) Mysten Labs, Inc.
2// Modifications Copyright (c) 2024 IOTA Stiftung
3// SPDX-License-Identifier: Apache-2.0
4
5use std::sync::Arc;
6
7use iota_types::base_types::{IotaAddress, TypeTag};
8use move_binary_format::errors::VMError;
9use thiserror::Error;
10
11#[derive(Error, Debug, Clone)]
12pub enum Error {
13    #[error("{0}")]
14    Bcs(#[from] bcs::Error),
15
16    #[error("Store {} error: {}", store, source)]
17    Store {
18        store: &'static str,
19        source: Arc<dyn std::error::Error + Send + Sync + 'static>,
20    },
21
22    #[error("{0}")]
23    Deserialize(VMError),
24
25    #[error("Package has no modules: {0}")]
26    EmptyPackage(IotaAddress),
27
28    #[error("Function not found: {0}::{1}::{2}")]
29    FunctionNotFound(IotaAddress, String, String),
30
31    #[error("Conflicting types for input {0}: {1} and {2}")]
32    InputTypeConflict(u16, TypeTag, TypeTag),
33
34    #[error("Linkage not found for package: {0}")]
35    LinkageNotFound(IotaAddress),
36
37    #[error("Module not found: {0}::{1}")]
38    ModuleNotFound(IotaAddress, String),
39
40    #[error("No origin package found for {0}::{1}::{2}")]
41    NoTypeOrigin(IotaAddress, String, String),
42
43    #[error("Not a package: {0}")]
44    NotAPackage(IotaAddress),
45
46    #[error("Not an identifier: '{0}'")]
47    NotAnIdentifier(String),
48
49    #[error("Package not found: {0}")]
50    PackageNotFound(IotaAddress),
51
52    #[error("Datatype not found: {0}::{1}::{2}")]
53    DatatypeNotFound(IotaAddress, String, String),
54
55    #[error("More than {0} struct definitions required to resolve type")]
56    TooManyTypeNodes(usize, usize),
57
58    #[error("Expected at most {0} type parameters, got {1}")]
59    TooManyTypeParams(usize, usize),
60
61    #[error("Expected {0} type parameters, but got {1}")]
62    TypeArityMismatch(usize, usize),
63
64    #[error("Type parameter nesting exceeded limit of {0}")]
65    TypeParamNesting(usize, usize),
66
67    #[error("Type Parameter {0} out of bounds ({1})")]
68    TypeParamOOB(u16, usize),
69
70    #[error("Unexpected reference type.")]
71    UnexpectedReference,
72
73    #[error("Unexpected type: 'signer'.")]
74    UnexpectedSigner,
75
76    #[error("Unexpected error: {0}")]
77    Unexpected(Arc<dyn std::error::Error + Send + Sync + 'static>),
78
79    #[error("Type layout nesting exceeded limit of {0}")]
80    ValueNesting(usize),
81}