tx_bakery_ogmios/
error.rs

1use anyhow::anyhow;
2use plutus_ledger_api::csl::{csl_to_pla::TryFromCSLError, pla_to_csl::TryFromPLAError};
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5use thiserror::Error;
6use tx_bakery::{chain_query::ChainQueryError, submitter::SubmitterError};
7
8pub type Result<T> = std::result::Result<T, OgmiosError>;
9
10#[derive(Error, Debug)]
11pub enum OgmiosError {
12    #[error(transparent)]
13    TryFromPLAError(#[from] TryFromPLAError),
14
15    #[error(transparent)]
16    TryFromCSLError(#[from] TryFromCSLError),
17
18    #[error("Couldn't convert a {label} from Ogmios response: {source}")]
19    ConversionError {
20        label: String,
21        source: anyhow::Error,
22    },
23
24    #[error(transparent)]
25    RequestError(#[from] reqwest::Error),
26
27    #[error(transparent)]
28    IOError(#[from] std::io::Error),
29
30    #[error("Failed to start Ogmios: {0}")]
31    StartupError(anyhow::Error),
32
33    #[error(transparent)]
34    JSONRpcError(#[from] jsonrpsee::core::client::Error),
35}
36
37impl From<OgmiosError> for ChainQueryError {
38    fn from(err: OgmiosError) -> ChainQueryError {
39        ChainQueryError(anyhow!(err))
40    }
41}
42
43impl From<OgmiosError> for SubmitterError {
44    fn from(err: OgmiosError) -> SubmitterError {
45        SubmitterError(anyhow!(err))
46    }
47}
48
49#[derive(Error, Clone, Debug, Serialize, Deserialize)]
50#[error("JsonRPCError {code}: {message} ({data:?})")]
51pub struct JsonRPCError {
52    pub code: i16,
53    pub message: String,
54    pub data: Option<Value>,
55}