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::TypeTag;
8use move_binary_format::errors::VMError;
9use move_core_types::account_address::AccountAddress;
10use thiserror::Error;
11
12#[derive(Error, Debug, Clone)]
13pub enum Error {
14    #[error("{0}")]
15    Bcs(#[from] bcs::Error),
16
17    #[error("Store {} error: {}", store, source)]
18    Store {
19        store: &'static str,
20        source: Arc<dyn std::error::Error + Send + Sync + 'static>,
21    },
22
23    #[error("{0}")]
24    Deserialize(VMError),
25
26    #[error(
27        "Package has no modules: {}",
28        .0.to_canonical_display(/* with_prefix */ true),
29    )]
30    EmptyPackage(AccountAddress),
31
32    #[error(
33        "Function not found: {}::{1}::{2}",
34        .0.to_canonical_display(/* with_prefix */ true),
35    )]
36    FunctionNotFound(AccountAddress, String, String),
37
38    #[error(
39        "Conflicting types for input {0}: {} and {}",
40        .1.to_canonical_display(/* with_prefix */ true),
41        .2.to_canonical_display(/* with_prefix */ true),
42    )]
43    InputTypeConflict(u16, TypeTag, TypeTag),
44
45    #[error(
46        "Linkage not found for package: {}",
47        .0.to_canonical_display(/* with_prefix */ true),
48    )]
49    LinkageNotFound(AccountAddress),
50
51    #[error(
52        "Module not found: {}::{1}",
53        .0.to_canonical_display(/* with_prefix */ true),
54    )]
55    ModuleNotFound(AccountAddress, String),
56
57    #[error(
58        "No origin package found for {}::{1}::{2}",
59        .0.to_canonical_display(/* with_prefix */ true),
60    )]
61    NoTypeOrigin(AccountAddress, String, String),
62
63    #[error(
64        "Not a package: {}",
65        .0.to_canonical_display(/* with_prefix */ true),
66    )]
67    NotAPackage(AccountAddress),
68
69    #[error("Not an identifier: '{0}'")]
70    NotAnIdentifier(String),
71
72    #[error(
73        "Package not found: {}",
74        .0.to_canonical_display(/* with_prefix */ true),
75    )]
76    PackageNotFound(AccountAddress),
77
78    #[error(
79        "Datatype not found: {}::{1}::{2}",
80        .0.to_canonical_display(/* with_prefix */ true),
81    )]
82    DatatypeNotFound(AccountAddress, String, String),
83
84    #[error("More than {0} struct definitions required to resolve type")]
85    TooManyTypeNodes(usize, usize),
86
87    #[error("Expected at most {0} type parameters, got {1}")]
88    TooManyTypeParams(usize, usize),
89
90    #[error("Expected {0} type parameters, but got {1}")]
91    TypeArityMismatch(usize, usize),
92
93    #[error("Type parameter nesting exceeded limit of {0}")]
94    TypeParamNesting(usize, usize),
95
96    #[error("Type Parameter {0} out of bounds ({1})")]
97    TypeParamOOB(u16, usize),
98
99    #[error("Unexpected reference type.")]
100    UnexpectedReference,
101
102    #[error("Unexpected type: 'signer'.")]
103    UnexpectedSigner,
104
105    #[error("Unexpected error: {0}")]
106    Unexpected(Arc<dyn std::error::Error + Send + Sync + 'static>),
107
108    #[error("Type layout nesting exceeded limit of {0}")]
109    ValueNesting(usize),
110}