-
Notifications
You must be signed in to change notification settings - Fork 125
/
error.rs
91 lines (79 loc) · 2.79 KB
/
error.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*
Copyright 2019 Supercomputing Systems AG
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
use crate::{api::UnexpectedTxStatus, rpc::Error as RpcClientError, ExtrinsicReport};
use ac_node_api::{
error::DispatchError,
metadata::{MetadataConversionError, MetadataError},
};
use alloc::{boxed::Box, vec::Vec};
use codec::{Decode, Encode};
use core::error::Error as ErrorT;
pub type Result<T> = core::result::Result<T, Error>;
#[derive(Debug, derive_more::From)]
pub enum Error {
/// Could not fetch the genesis hash from node.
FetchGenesisHash,
/// Expected a signer, but none is assigned.
NoSigner,
/// Rpc Client Error.
RpcClient(RpcClientError),
/// Metadata Error.
Metadata(MetadataError),
/// Invalid Metadata Error.
InvalidMetadata(MetadataConversionError),
/// Node Api Error.
NodeApi(ac_node_api::error::Error),
/// Encode / Decode Error.
Codec(codec::Error),
/// Could not convert NumberOrHex with try_from.
TryFromIntError,
/// Extrinsic failed onchain. Contains the encoded report and the associated dispatch error.
FailedExtrinsic(FailedExtrinsicError),
/// Encountered unexpected tx status during watch process.
UnexpectedTxStatus(UnexpectedTxStatus),
/// Could not send update because the Stream has been closed unexpectedly.
NoStream,
/// Could not find the expected extrinsic.
ExtrinsicNotFound,
/// Could not find the expected block hash.
BlockHashNotFound,
/// Could not find the expected block.
BlockNotFound,
/// Operation needs events but events are missing.
EventsMissing,
/// Operation wants to add events but they are already present.
EventsAlreadyPresent,
/// Any custom Error.
Other(Box<dyn ErrorT + Send + Sync + 'static>),
}
/// Encountered unexpected tx status during watch process or the extrinsic failed.
#[derive(Debug)]
pub struct FailedExtrinsicError {
dispatch_error: DispatchError,
encoded_report: Vec<u8>,
}
impl FailedExtrinsicError {
pub fn new(dispatch_error: DispatchError, encoded_report: Vec<u8>) -> Self {
Self { dispatch_error, encoded_report }
}
pub fn dispatch_error(&self) -> &DispatchError {
&self.dispatch_error
}
pub fn get_report<Hash: Encode + Decode>(&self) -> Result<ExtrinsicReport<Hash>> {
let report = Decode::decode(&mut self.encoded_report.as_slice())?;
Ok(report)
}
pub fn encoded_report(&self) -> &[u8] {
&self.encoded_report
}
}